极简代码:1012 数字分类 (20分)

立志用更少的代码做更高效的表达


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

A​1 = 能被 5 整除的数字中所有偶数的和;
A2= 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n1 −n​2​​ +n3​​ −n​4⋯;
A​3= 被 5 除后余 2 的数字的个数;
A​4= 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;
A5= 被 5 除后余 4 的数字中最大数字。

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

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

若其中某一类数字不存在,则在相应位置输出 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; }

每日一句

零星的变好,最后也会如星河般闪耀。

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页