数字分类 (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}