[Aizu] 0100 SaleResult

题目

传送门: Sale Result

描述

给你一些你们公司的销售信息, 编写一个程序判断哪些雇员是优秀的
该程序应读取数据列表, 其中每个项目包括员工ID i, 销售额q和相应的单价p. 然后, 程序应按输入顺序打印总销售额(即p×q的总和)大于或等于1,000,000的雇员的ID. 如果没有这样的员工, 程序应打印“NA”. 您可以假设n <4000, 并且每个员工都有唯一的ID. 单价p小于或等于1,000,000, 销售额q小于或等于100,000.

输入

输入包含多个测试用例, 输入以只有0的一行结束, 每一个测试样例如下:
n (列表中数据的数量)
i p q
i p q
.
.
i p q

输出

对于每一个测试用例, 输出雇员id的列表或者一个单词"NA"

样例输入

4
1001 2000 520
1002 1800 450
1003 1600 625
1001 200 1220
2
1001 100 3
1005 1000 100
2
2013 5000 100
2013 5000 100
0

样例输出

1001
1003
NA
2013

求解

分析

程序设计很简单, 需要考虑的是一个雇员的id可能出现多次, 需要统计总和, 如果总和大于1,000,000, 并且它之前没有输出过, 那么就输出它的id, 否则只是单纯的加上总和, 不进行其他的处理

设计

使用total数组来存储每个雇员的销售额, 每个测试用例都需要重新清空一下,(PS: 如果数据量小的话, 记录下出现的id, 只清空出现的id也许是个不错的想法). 如果在加这次的销售额之前它小于1,000,000, 加完之后它大于1,000,000那么此时就输出它

编码

#include <bits/stdc++.h>
using namespace std;
#define GOOD 1000000

long total[4005];

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int n, id, p, q, cnt;
	cin >> n;
	while (n != 0) {
		for (int i = 0; i < 4005; i++) {
			total[i] = 0;
		}
		cnt = 1;
		for (int i = 0; i < n; i++) {
			cin >> id >> p >> q;
			long before = total[id];
			total[id] += p * q;
			if (before < GOOD && total[id] >= GOOD) {
				cout << id << endl;
				cnt = 0;
			}
		}
		if  (cnt) {
			cout << "NA" << endl;
		}
		cin >> n;
	}
}

结果

总结

没有一颗虔诚的心你是看不到总结的

好吧, 其实只是我没写

原文地址:https://www.cnblogs.com/by-sknight/p/10952338.html