1012 数字分类 (20 分)
题目:1012 数字分类 (20 分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
思路:
- 这道题题目理解不难,实现起来也容易,只要照着题目要求做就行了,但是有一个点容易忽略:A2要求中和为0的情况与其不存在的情况。和为0的情况是一种特判。
代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <sstream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <stack> 9 #include <queue> 10 #include <vector> 11 #include <map> 12 using namespace std; 13 14 int main() 15 { 16 int n; 17 int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0; 18 int num[1005]; 19 scanf("%d", &n); 20 for(int i = 0; i < n; i++) 21 { 22 scanf("%d", &num[i]); 23 } 24 int k = 0, suma4 = 0; 25 for(int i = 0; i < n; i++) 26 { 27 if(num[i] % 5 == 0 && num[i] % 2 == 0) 28 a1 += num[i]; 29 else if(num[i] % 5 == 1) 30 { 31 if(k % 2 == 0) 32 a2 = a2 + num[i]; 33 else 34 a2 = a2 - num[i]; 35 k++; 36 } 37 else if(num[i] % 5 == 2) 38 a3++; 39 else if(num[i] % 5 == 3) 40 { 41 suma4 += num[i]; 42 a4++; 43 } 44 else if(num[i] % 5 == 4) 45 { 46 if(num[i] > a5) 47 a5 = num[i]; 48 } 49 } 50 if(a1 == 0) 51 printf("N "); 52 else 53 printf("%d ", a1); 54 if(a2 == 0 && k == 0) 55 printf("N "); 56 else 57 printf("%d ", a2); 58 if(a3 == 0) 59 printf("N "); 60 else 61 printf("%d ", a3); 62 if(a4 == 0) 63 printf("N "); 64 else 65 printf("%.1f ", 1.0 * suma4 / a4); 66 if(a5 == 0) 67 printf("N"); 68 else 69 printf("%d", a5); 70 return 0; 71 }
总结:
一开始测试点8没过,虽然设了k变量但是在输出时忘记考虑k != 0而suma4 = 0的情况了,考虑进去后就通过了。做题还是没能做到一开始就考虑全面呢,错了才去考虑……