Bill(bill)
【问题描述】
大家都知道,高三的同学很辛苦,需要补充很多营养。但是由于CZYZ高三教室在 4楼和5楼,而高一教室在 1楼和2楼,所以导致高三同学总是很难到想吃的东西。又由于D,G,Z的动作总是很慢,所以想吃到不错的午餐更是艰难。
所以自从不用上课,X 就承担下了代购午餐的任务。但是由于 X 不上晚自习,不能代购晚餐,所以大家商议决定每周轮流留一张饭卡给X。
可是计划赶不上变化,期间出现了忘换饭卡之类的一系列问题,导致了账目的混乱,于是X又承担下了记录账目的任务。
每天被账目搞得一团糟的X 想请你帮她写一个程序,来清楚地记账。
【输入格式】
第 1行一个整数 n(0
第 2至n行每行两个字母(只含D,G,Z),表示前一个同学欠后一个同学一顿饭,字
母之间有一个空格。
【输出格式】
共 3行,每行一个字母和一个数字,之间有一个空格,行末无空格。
第 1行D x1
第 2行G x2
第 3行Z x3
Xi 为正数是表示该同学欠了别人 xi 顿;0 表示该同学既不欠人,也不被欠;负数表示
该同学被欠xi顿。
【样例输入】
5
D G
G D
G Z
D G
D Z
【样例输出】
D 2
G 0
Z -2
求方法
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
这道题可以使用哈希表来记录每个同学欠或被欠的饭卡数目。具体实现步骤如下:
定义一个哈希表,用于记录每个同学欠或被欠的饭卡数目,初始值为0。
读入每一天的账目,对于每一对欠饭的同学,更新哈希表中对应同学的饭卡数目。
遍历哈希表,输出每个同学欠或被欠的饭卡数目。
C++代码实现如下:
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n;
unordered_map<char, int> bill;
bill['D'] = bill['G'] = bill['Z'] = 0;
while (n--) {
char debtor, creditor;
cin >> debtor >> creditor;
bill[debtor]--; // debtor欠了creditor一顿饭,所以负数
bill[creditor]++;
}
cout << "D " << bill['D'] << endl;
cout << "G " << bill['G'] << endl;
cout << "Z " << bill['Z'] << endl;
return 0;
}
该程序首先读入需要记录的天数n,然后定义一个哈希表bill,用于记录每个同学欠或被欠的饭卡数目,初始值为0。接下来,使用while循环读入每一天的账目,对于每一对欠饭的同学,更新哈希表中对应同学的饭卡数目。最后,遍历哈希表,输出每个同学欠或被欠的饭卡数目。
对于样例输入,程序输出结果如下:
D 2
G 0
Z -2
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
不知道你这个问题是否已经解决, 如果还没有解决的话: