题目描述
毛毛有一群好朋友,现在他们需要互相赠送金钱.他们按下面的规则去互相送钱.你需要最后算出来每个人最后手里的钱的数量.具体的描述看下面
输入入格式
- 第 1 行:人数
, ,表示有多少个人相互赠送金钱 - 第 2 到 n+1 行:这 N 个的名字,每个名字的长度不超过14
- 第 N+2 行一直到文件的末尾:数据是这样的
- 第一行是将会送出钱人的名字
- 第二行包含2个数字:
- 第一个数字,m,送钱人需要送出的钱的数目(在 0 到 2000 的范围内)
- 第二个数字,cnt,是将收到这个送礼者礼物的人的个数,如果这个数字是非零的, 在下面 cnt 行列出接受者的名字,一个名字一行.
输入样例
5
maomao
laura
owen
vick
amr
maomao
200 3
laura
owen
vick
owen
500 1
maomao
amr
150 2
vick
owen
laura
0 2
amr
vick
vick
0 0输出格式
输出 N 行
每行是一个的名字加上空格再加上最后手上的钱的数量.如果送出的钱比得到的钱多,你应该输出一个负值,表明多多少.否则输出正值
注意这个输出的顺序和读取的人的顺序是一样的
每个人把相同数目的钱给每位要送礼的朋友,而且尽可能多给,不能给出的钱被送钱者自己保留(只就整除).
样例输出
maomao 302
laura 66
owen -359
vick 141
amr -150hint 1
整个送钱的过程如下表格
刚开始,每个人都没有钱,每个的钱为0
+--------+-------+------+------+-----+
| maomao | laura | owen | vick | amr |
+--------+-------+------+------+-----+
| 0 | 0 | 0 | 0 | 0 |
+--------+-------+------+------+-----+
maomao
200 3
laura
owen
vick
maomao送200钱,给3个人,每个人得到 200/3 = 66
剩余2元钱maomao自己拿着
maomao的手上的钱就应该是-200+2 = -198
+--------+-------+------+------+-----+
| maomao | laura | owen | vick | amr |
+--------+-------+------+------+-----+
| -198 | 66 | 66 | 66 | 0 |
+--------+-------+------+------+-----+
owen
500 1
maomao
+--------+-------+------+------+-----+
| maomao | laura | owen | vick | amr |
+--------+-------+------+------+-----+
| 302 | 66 | -434 | 66 | 0 |
+--------+-------+------+------+-----+
amr
150 2
vick
owen
+--------+-------+------+------+------+
| maomao | laura | owen | vick | amr |
+--------+-------+------+------+------+
| 302 | 66 | -359 | 141 | -150 |
+--------+-------+------+------+------+
vick
0 0
+--------+-------+------+------+------+
| maomao | laura | owen | vick | amr |
+--------+-------+------+------+------+
| 302 | 66 | -359 | 141 | -150 |
+--------+-------+------+------+------+hint 2
如何判断整个文件的数据读取完毕了呢?
比如有一个in文件的数据如下
1 2 32 3我们不知道具体有多少数据,怎么知道能把所有的数据读取完毕了呢?
#include <iostream>
using namespace std;
int main() {
while( 1) {
int t;
cin >> t;
cout << t <<endl;
//检查是否达到文件的末尾
// eof = end of file
// 如果 cin.eof() 返回true,就表示达到了文件的末尾
if( cin.eof()) break;
}
return 0;
}运行,代码会在读取所的数据读取完毕后,结果.
./1< incin.eof() 是 C++ 中的一个函数,用于检查输入流 cin 是否已经到达文件末尾 (EOF)。当 cin 到达文件末尾时,cin.eof() 返回 true;否则返回 false。
在使用时,通常会在读取输入之后立即检查 cin.eof() 的返回值,以确保没有尝试读取到文件末尾之后的无效数据。