题目

给定一系列正整数,请按要求对数字进行分类,并输出以下 5 个数字:

  • $A_1$ = 能被 5 整除的数字中所有偶数的和;
  • $A_2$ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 $n_1-n_2+n_3-n_4\cdots$ ;
  • $A_3$ = 被 5 除后余 2 的数字的个数;
  • $A_4$ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
  • $A_5$ = 被 5 除后余 4 的数字中最大数字。

输入格式:

每个输入包含 1 个测试用例。每个测试用例先给出一个不超过 1000 的正整数 $N$ ,随后给出 $N$ 个不超过 1000 的待分类的正整数。数字间以空格分隔。

输出格式:

对给定的 $N$ 个正整数,按题目要求计算 $A_1$ ~ $A_5$ 并在一行中顺序输出。数字间以空格分隔,但行末不得有多余空格。

若分类之后某一类不存在数字,则在相应位置输出 N

输入样例 1:

1
13 1 2 3 4 5 6 7 8 9 10 20 16 18

输出样例 1:

1
30 11 2 9.7 9

输入样例 2:

1
8 1 2 4 5 6 7 9 16

输出样例 2:

1
N 11 2 N 9

思路

每次读一个数字,根据对5的余数进行不同的处理即可。

代码

Github最新代码,欢迎交流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <stdio.h>

int main()
{
	int count;
	int A1 = 0, A2 = 0, A3 = 0, A4 = 0, A5 = 0;
	int A2flag = 0, A4count = 0;

	scanf("%d", &count);
	for (int i = 0, n; i < count; i++)
	{
		scanf("%d", &n);
		switch(n % 5) {
		case 0:
			A1 += n % 2 ? 0 : n;
			break;
		case 1:
			A2flag = A2flag == 1 ? -1 : 1;
			A2 += A2flag * n;
			break;
		case 2:
			A3 ++;
			break;
		case 3:
			A4 += n;
			A4count ++;
			break;
		case 4:
			A5 = n > A5? n : A5;
			break;
		}
	}

	if (A1 == 0)
		printf("N ");
	else
		printf("%d ", A1);
	if (A2flag == 0)
		printf("N ");
	else
		printf("%d ", A2);
	if (A3 == 0)
		printf("N ");
	else
		printf("%d ", A3);
	if (A4 == 0)
		printf("N ");
	else
		printf("%.1f ", A4 * 1.0 / A4count);
	if (A5 == 0)
		printf("N");
	else
		printf("%d", A5);

	return 0;
}