题目:

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制的更多相关文章

  1. 上海线下技术交流(AA制)

    标签: 上海线下技术交流会 作者:王清培(Plen wang) 沪江Java资深架构师 .营销云平台负责人 上海地区技术线下交流,本次聚会AA制,要的就是热爱技术,交流技术,不是凑热闹.特此留念. 活 ...

  2. <算法>进制转换超详细

    16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...

  3. C/C++<算法>进制转换超详细

    16转10 用竖式计算: 16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第 ...

  4. .NET Core应用框架AA介绍(二)

    AA的开源地址 https://github.com/ChengLab/AAFrameWork AA框架是一个基础应用框架,是建立在众多大家熟知的流行工具之上并与之集成.比如:ASP.NET Core ...

  5. Blockchain technology and Application

    BTC-密码学原理 比特币本质:crypto currency[加密货币] 比特币用到的两个功能: 1.哈希 crypto graphic hash function 2.签名(非对称加密) 哈希cr ...

  6. R语言中文分词包jiebaR

    R语言中文分词包jiebaR R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到大数据 ...

  7. 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 ...

  8. [No000061]"别人"凭什么要帮你?&理解中国人的人际和谐&外人、自己人与另一半

    你出身平凡家庭:你毕业于普通大学:你没有田晓霞这样的妻子或者普京这样的丈夫:在权力.金钱乃至能力积累上,你才刚刚上路.你很年轻,你渴望成功,那么,"别人"凭什么帮你? " ...

  9. C#源码500份

    C Sharp  短信发送平台源代码.rar http://1000eb.com/5c6vASP.NET+AJAX基础示例 视频教程 http://1000eb.com/89jcC# Winform ...

随机推荐

  1. btrace-dtrace-for-java-ish

    http://dtrace.org/blogs/ahl/2012/04/24/btrace-dtrace-for-java-ish/

  2. Plan Explorer数据库

    Plan Explorer数据库 https://www.sentryone.com/platform/sql-server-performance-monitoring

  3. 《大话设计模式》C#/C++版pdf/源码下载

    大话设计模式(带目录完整版)[中文PDF+源代码].zip 下载地址:http://pan.baidu.com/s/1giQP4大话设计模式C++.pdf下载地址:http://pan.baidu.c ...

  4. 树莓派 Windows10 IoT Core 开发教程

    入门指引 现在让我们把LED连接到安装了Windows10 IoT Core 的硬件设备,并创建一个应用程序来让它们闪烁. 在Visual Studio中加载工程 首先在这里找到例程,这里有C++和C ...

  5. cocos2d-x绑lua的开发环境

    2013年是手游开发井喷的一年,也是手游市场竞争最为激烈的一年,ios市场除了刷榜.刷榜,还是刷榜,而android有点像黑市的感觉,水太深(很多渠道商已经从上游控制了流量的入口).而cocos2d- ...

  6. Java并发编程的艺术(五)——中断

    什么是中断? 在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作.因此,Java提供了一种用于停止线程的机制——中断. 中断只是一种协作机制,Java没有给中断增加任 ...

  7. 实用ExtJS教程100例-008:使用iframe填充ExtJS Window组件

    上面两节中我们分别演示了ExtJS Window的常用功能 和 如何最小化ExtJS Window组件,在这篇内容中我们来演示一下如何使用iframe填充window组件. 思路很简单,首先创建一个w ...

  8. [Web 前端] 使用yarn代替npm作为node.js的模块管理器

    cp from : https://www.jianshu.com/p/bfe96f89da0e     Fast, reliable, and secure dependency managemen ...

  9. JAVA中如何取得一个变量的类型

    class Test {public static void main(String[] args) {int i=1;System.out.println(getType(i));}public s ...

  10. html input type=file 选择图片,图片预览 纯html js实现图片预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...