牛客网 PAT 乙级 1002 数字分类

本文提供了一道PAT题目“A1A2A3A4A5”的详细解答过程,通过使用switch-case结构来对输入的数据进行分类处理,并实现了特定的计算逻辑。该解决方案清晰地展示了如何根据输入数据的不同余数来进行相应的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接:

https://www.nowcoder.com/pat/6/problem/4078


要点:

①大概扫一眼题目,A1 A2 A3 A4 A5, 熟悉的switch-case 模式嘛,那重点就是每一个case 要怎么写了。

②再看输入描述,很眼熟噻。

“先输入一个N,再输入N个数”,用下面这个来搞定:

     

     
        int n;
	scanf("%d", &n);
        int i;
	for (i = 0; i < n; i++) { 
              scanf("%d", &item);
               ... }

所以,就此就能敲定,在for循环里放入switch语句,对每一次输入的item都进行一次判断。并由于输出结果是限定的 A1~A5,所以我就偷懒,直接定义了五个数(A1~A5)来存放每一次判断的结果。

③那么就开始写switch语句。

有几点需要注意:

case 0~4  A1~A5 一一对应,不要搞错;

关于{ },因为case 里面还会有if语句,所以我建议,写的时候把{ }都加上,写完一个case ,再检查删去不必要的{ },方便书写,也方便最后的修改;

switch(item%5){...}
case 0: //item%5=0 再加一句if判断偶数就好

case 1://item%5=1 额外定义int flag=1;再每次flag=-flag;实现符号交替

case 2://item%5=2 直接++就好

case 3://item%5=3 我们先算sum,等输出的时候再算平均数

case 4://item=4 一个if语句判断大小,大的留下

这样switch语句就完成了,把每一个单独来写还是挺简单哒,对不?

④输出语句这里我自己是有点懵,突然就有一种想用数组的冲动,不过,A4要保留小数输出,跟其他的不一样,想想就很麻烦。

于是偷懒如我,决定把A1~A5,每一个单独判断是否为0,单独输出。

除了敲得字多了些,也没有什么不好嘛。

另外再提醒一下,我们A4求的是sum,且定义的是int型,输出是需要强制转换 (double)。


下面是完整代码:

#include<stdio.h>
#include<math.h>
#include<string.h>
 
int main() {
    int n;
    scanf("%d", &n);
     
    int A1, A2, A3, A4, A5;
    A1 = A2 = A3 = A4 = A5 = 0;
    int count=0;
     
    int flag = 1;
 
    int item;
    int i;
    for (i = 0; i < n; i++) {
        scanf("%d", &item);
        switch (item % 5) {
        case 0: {
            if (item % 2 == 0)
                A1 = A1 + item;
            break;
        }
        case 1: {
            A2 = A2 + flag*item;
            flag = - flag;
            break;
        }
        case 2: {
            A3++;
            break;
        }
        case 3: {
            A4 = A4 + item;
            count++;
            break;
        }
        case 4: {
            if (A5 < item)
                A5 = item;
            break;
        }
         
        }
    }
     
    if (A1 != 0)
        printf("%d ", A1);
    else
        printf("N ");
 
    if (A2 != 0)
        printf("%d ", A2);
    else
        printf("N ");
 
    if (A3 != 0)
        printf("%d ", A3);
    else
        printf("N ");
 
    if (A4 != 0)
        printf("%.1f ", (double)A4 / count);
    else
        printf("N ");
 
    if (A5 != 0)
        printf("%d", A5);
    else
        printf("N");
 
 
 
 
    return 0;
 
}

//真的是好长~~~

(~ ̄▽ ̄)~

测试点

测试点结果用时(ms)内存(KB)
1答案正确3300
2答案正确4272
3答案正确4268
4答案正确3304
5答案正确4296
6答案正确3296
7答案正确3416





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值