PAT B1012 数字分类
题目描述:
给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:
A1 = 能被 5 整除的数字中所有偶数的和;
A2 = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1−n2+n3−n4⋯;
A3 = 被 5 除后余 2 的数字的个数;
A4 = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A5 = 被 5 除后余 4 的数字中最大数字。
输入格式:
每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N,随后给出 N 个不超过 1000 的待分类的正整数。数字间以空格分隔。
输出格式:
对给定的 N 个正整数,按题目要求计算 A1~A5 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。
若其中某一类数字不存在,则在相应位置输出 N。
输入样例 1:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出样例 1:
30 11 2 9.7 9
输入样例 2:
8 1 2 4 5 6 7 9 16
输出样例 2:
N 11 2 N 9
参考代码:
1 /*********************************************** 2 PAT B1012 数字分类 3 ***********************************************/ 4 #include <iostream> 5 #include <vector> 6 7 using namespace std; 8 9 int main() { 10 vector<vector<double> > ansList(5, { 0, 0 }); 11 //double[0]表示想要的结果或者中间值; 12 //double[1]用来标记辅助信息:是否出现、出现个数、加减符号 13 14 int temp = 0; 15 cin >> temp; //数字的个数信息可以忽略 16 while (cin >> temp) { 17 switch (temp % 5) { 18 case 0: 19 if (temp % 10 == 0) { 20 ansList[0][0] += temp; 21 ansList[0][1]++; 22 } 23 break; 24 case 1: 25 if (int(ansList[1][1]) % 2 == 0) 26 ansList[1][0] += temp; 27 else 28 ansList[1][0] -= temp; 29 30 ansList[1][1]++; 31 break; 32 case 2: 33 ansList[2][0]++; 34 ansList[2][1]++; 35 break; 36 case 3: 37 ansList[3][0] += temp; 38 ansList[3][1]++; 39 break; 40 case 4: 41 if (temp > ansList[4][0]) ansList[4][0] = temp; 42 ansList[4][1]++; 43 break; 44 default: 45 break; 46 } 47 } 48 49 ansList[3][0] = int((ansList[3][0] / ansList[3][1]) * 10 + 0.5) / 10.0; 50 51 for (int i = 0; i < 5; ++i) { 52 if (ansList[i][1] == 0) 53 cout << 'N'; 54 else 55 cout << ansList[i][0]; 56 if (i != 4) cout << ' '; 57 } 58 59 return 0; 60 }
注意事项:
1:最终的结果中有需要保留一位小数的,因此用double类型存储。
2:vector容器不存在vector<typename, typename>、vector<typename1, typename2...>的用法。