立志用更少的代码做更高效的表达
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
简单模拟即可, 使用switch提高效率。
代码展示
#include <stdio.h>
int main() {
int x1 = 0, x2 = 0, x3 = 0, x4 = 0, x5 = 0;
int x2flag = 0, x4count = 0;
int count; scanf("%d", &count);
for(int i = 0, n; i < count; i++) {
scanf("%d", &n);
switch(n % 5) {
case 0: x1 += n % 2 ? 0 : n; break;
case 1: x2flag = x2flag == 1 ? -1 : 1; x2 += x2flag * n; break;
case 2: x3 ++; break;
case 3: x4 += n; x4count ++; break;
case 4: x5 = n > x5? n : x5; break;
}
}
if(x1 == 0) printf("N "); else printf("%d ", x1);
if(x2flag == 0) printf("N "); else printf("%d ", x2);
if(x3 == 0) printf("N "); else printf("%d ", x3);
if(x4 == 0) printf("N "); else printf("%.1f ", x4 * 1.0 / x4count);
if(x5 == 0) printf("N"); else printf("%d", x5);
return 0; }
每日一句
零星的变好,最后也会如星河般闪耀。