牛客网 PAT 乙级 1002 数字分类

题目链接:

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





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值