PTA basic 1012 数字分类 (20 分) c语言实现(gcc)

给定一系列正整数,请按要求对数字进行分类,并输出以下 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


解题思路
1.用两组数组分别存储A1-A5的运算结果arr[5],以及判定结果是否存在的count[5] //如果没有单独判定结果是否存在,测试点8会失败
2.循环接收数字直到换行符为止,对接收到的每一个数字进行取余,对结果进行判定,符合A1-A5条件的数字,按照条件存入结果数组arr,并使count[i]++
3.因为第一个结果输出时候前面没有空格,对第一个结果单独输出
4.A4需要取浮点数,int要转换到float再进行输出

 1 #include "stdio.h"
 2 int main(){
 3     int arr[5]={0,0,0,0,0},n,i=0,temp,count[5]={0,0,0,0,0},N;
 4     float ave;
 5     scanf("%d",&N);
 6     while(scanf("%d",&n)!=EOF){
 7         temp=n%5;
 8         switch(temp){
 9             case 0:{if(n%2==0){
10                 arr[0]+=n;
11                 count[0]++;
12             }break;}
13             case 1:{arr[1]=count[1]%2==0?arr[1]+n:arr[1]-n;count[1]++;break;}
14             case 2:{arr[2]++;count[2]++;break;}
15             case 3:{arr[3]+=n;count[3]++;break;}
16             case 4:{arr[4]=arr[4]>n?arr[4]:n;count[4]++;break;}
17         }
18     }
19     i=0;
20     if(count[i]==0){
21         printf("N");
22     }else{
23         printf("%d",arr[0]);
24     }
25     for(i=1;i<5;i++){
26         if(count[i]==0){
27             printf(" N");
28         }else{
29             if(i==3){
30                 ave =(float )arr[i]/(float)count[3];
31                 printf(" %.1f",ave);
32             }
33             else{
34                 printf(" %d",arr[i]);
35             }
36         }
37     }
38     return 0;
39 }

 

posted @ 2021-04-19 16:59  keiiha  阅读(114)  评论(0编辑  收藏  举报