(算法)AA制
题目:
A、B、C、D四个人去吃大餐,吃饭去说好,付钱时AA制,但最后结账时,因为4个人带的钱不一样多,最后A付了112元,B付了86元,C付了10元,D没带钱,所以没有付;
但AA制需要平摊餐费,所以需要设计一种方案来解决这个问题。
现假设有n个人,m个人付款,请通过编程来解决这个问题(解决问题有多种方案,只需实现一种即可)
思路:
1、计算每个人本需要支付的钱,即平均数;
2、计算实际上每个人的盈亏,即支付金额减去平均数;
3、通过盈亏关系进行分配,即少付的将钱支付给多付的;
以题目为例,平均数为52,减去平均数后的盈亏关系为:
A:+60
B:+34
C:-42
D:-52
那么此时C、D需将钱支付给A和B,怎么支付呢?可以将问题转化为一下的矩阵形式:
| A | B | |
| C | ||
| D |
矩阵每个格子表示:x应该支付多少给y,从上到下依次填写表格,可以得到:
| A | B | |
| C | 42 | 0 |
| D | 18 | 34 |
代码:
#include<iostream>
#include<vector>
using namespace std; const float EPSINON=0.00001; bool isZero(float x){
return (x>=-EPSINON) && (x<=EPSINON);
} int main(){
int num_all;
int num_paid;
int num_unpaid;
float sum,avg;
int idx;
float money; cout<< "Input number of people and number of who have paid: " <<endl; while(cin >> num_all >> num_paid){
vector<float> all(num_all,0.0); sum=;
for(int i=;i<num_paid;i++){
cin>>idx>>money;
all[idx-]=money;
sum+=all[idx-];
}
cout<<endl; avg=sum/num_all; vector<int> receive;
vector<int> pay; for(int i=;i<num_all;i++){
all[i]-=avg;
if(all[i]<)
pay.push_back(i+);
if(all[i]>)
receive.push_back(i+);
} int row=pay.size();
int col=receive.size(); vector<vector<float> > table(row,vector<float>(col,0.0)); float from,to;
for(int i=;i<row;i++){
for(int j=;j<col;j++){
from=pay[i]-;
to=receive[j]-; if(isZero(all[from]))
break; if(isZero(all[to]))
continue; if(all[from]+all[to]>=){
table[i][j]=-all[from];
all[to]=all[from]+all[to];
all[from]=0.0;
}
else{
table[i][j]=all[to];
all[from]=all[from]+all[to];
all[to]=0.0;
}
}
} for(int i=;i<row;i++){
for(int j=;j<col;j++){
cout<< table[i][j]<<" ";
}
cout<<endl;
}
cout<<endl; for(int i=;i<row;i++){
for(int j=;j<col;j++){
if(!isZero(table[i][j]))
cout<<pay[i]<<" paid "<<receive[j]<<" "<<table[i][j]<<endl;
}
}
} return ;
}
(算法)AA制的更多相关文章
- 上海线下技术交流(AA制)
标签: 上海线下技术交流会 作者:王清培(Plen wang) 沪江Java资深架构师 .营销云平台负责人 上海地区技术线下交流,本次聚会AA制,要的就是热爱技术,交流技术,不是凑热闹.特此留念. 活 ...
- <算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...
- C/C++<算法>进制转换超详细
16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...
- .NET Core应用框架AA介绍(二)
AA的开源地址 https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架,是建立在众多大家熟知的流行工具之上并与之集成.比如:ASP.NET Core ...
- Blockchain technology and Application
BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...
- R语言中文分词包jiebaR
R语言中文分词包jiebaR R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据 ...
- Lesson 11 One good turn deserves another
Text I was having dinner at a restaurant when Tony Steele came in. Tony worked in a layer's office y ...
- [No000061]"别人"凭什么要帮你?&理解中国人的人际和谐&外人、自己人与另一半
你出身平凡家庭:你毕业于普通大学:你没有田晓霞这样的妻子或者普京这样的丈夫:在权力.金钱乃至能力积累上,你才刚刚上路.你很年轻,你渴望成功,那么,"别人"凭什么帮你? " ...
- C#源码500份
C Sharp 短信发送平台源代码.rar http://1000eb.com/5c6vASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jcC# Winform ...
随机推荐
- btrace-dtrace-for-java-ish
http://dtrace.org/blogs/ahl/2012/04/24/btrace-dtrace-for-java-ish/
- Plan Explorer数据库
Plan Explorer数据库 https://www.sentryone.com/platform/sql-server-performance-monitoring
- 《大话设计模式》C#/C++版pdf/源码下载
大话设计模式(带目录完整版)[中文PDF+源代码].zip 下载地址:http://pan.baidu.com/s/1giQP4大话设计模式C++.pdf下载地址:http://pan.baidu.c ...
- 树莓派 Windows10 IoT Core 开发教程
入门指引 现在让我们把LED连接到安装了Windows10 IoT Core 的硬件设备,并创建一个应用程序来让它们闪烁. 在Visual Studio中加载工程 首先在这里找到例程,这里有C++和C ...
- cocos2d-x绑lua的开发环境
2013年是手游开发井喷的一年,也是手游市场竞争最为激烈的一年,ios市场除了刷榜.刷榜,还是刷榜,而android有点像黑市的感觉,水太深(很多渠道商已经从上游控制了流量的入口).而cocos2d- ...
- Java并发编程的艺术(五)——中断
什么是中断? 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作.因此,Java提供了一种用于停止线程的机制——中断. 中断只是一种协作机制,Java没有给中断增加任 ...
- 实用ExtJS教程100例-008:使用iframe填充ExtJS Window组件
上面两节中我们分别演示了ExtJS Window的常用功能 和 如何最小化ExtJS Window组件,在这篇内容中我们来演示一下如何使用iframe填充window组件. 思路很简单,首先创建一个w ...
- [Web 前端] 使用yarn代替npm作为node.js的模块管理器
cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency managemen ...
- JAVA中如何取得一个变量的类型
class Test {public static void main(String[] args) {int i=1;System.out.println(getType(i));}public s ...
- html input type=file 选择图片,图片预览 纯html js实现图片预览
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...