数字分类 (PATB-1012)
题面
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
113 1 2 3 4 5 6 7 8 9 10 20 16 18
样例输出1
130 11 2 9.7 9
样例输入2
18 1 2 4 5 6 7 9 16
样例输出2
1N 11 2 N 9
提示
无
思路
代码
1int n, m;
2
3int main()
4{
5 scanf("%d", &n);
6
7 int a1 = 0, a2 = 0, a3 = 0, a5 = 0;
8 int c1 = 0, c2 = 0, c4 = 0, c5 = 0;
9 DB a4 = 0;
10
11 for (int i = 0; i < n; i++)
12 {
13 scanf("%d", &m);
14 switch (m % 5)
15 {
16 case 0:
17 if (m % 2 == 0)
18 {
19 c1++;
20 a1 += m;
21 }
22 break;
23 case 1:
24 c2++;
25 a2 = a2 + m * ((c2 & 1) ? 1 : -1);
26 break;
27 case 2:
28 a3++;
29 break;
30 case 3:
31 c4++, a4 += m;
32 break;
33 case 4:
34 c5++;
35 a5 = max(a5, m);
36 }
37 }
38 if (c1)
39 printf("%d", a1);
40 else
41 printf("N");
42
43 if (c2)
44 printf(" %d", a2);
45 else
46 printf(" N");
47
48 if (a3)
49 printf(" %d", a3);
50 else
51 printf(" N");
52
53 if (c4)
54 printf(" %.1lf", a4 / c4);
55 else
56 printf(" N");
57
58 if (c5)
59 printf(" %d", a5);
60 else
61 printf(" N");
62
63 return 0;
64}