【C语言版】1012 数字分类 (20分)

    技术2022-07-11  112

     

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

    A​1​​ = 能被 5 整除的数字中所有偶数的和;A​2​​ = 将被 5 除后余 1 的数字按给出顺序进行交错求和,即计算 n​1​​−n​2​​+n​3​​−n​4​​⋯;A​3​​ = 被 5 除后余 2 的数字的个数;A​4​​ = 被 5 除后余 3 的数字的平均数,精确到小数点后 1 位;A​5​​ = 被 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

    【注】输入样例中的第一个数字是即将要输入多少个数字

     

    【参考代码】

    #include <stdio.h> int main() { int n,i=0,j=0,flag=1,count=0,t=0,array[1000],An[5]; char ch; scanf("%d",&n);//输入样例中的第一个数字是即将要输入多少个数字 do { scanf("%d",&array[j++]); ch=getchar(); } while(ch!='\n');//共有j个数字 for(i=0;i<5;i++) An[i]=0;//初试化 0 for(i=0;i<j;i++) //数据处理 { if((array[i]%5)==0 && (array[i]%2)==0)//能被 5 整除的数字中所有偶数的和; An[0]+=array[i]; if((array[i]%5)==1)//将被 5 除后余 1 的数字按给出顺序进行交错求和 { An[1]+=flag*array[i]; flag=-flag; t++; //交错求和 结果可能也为0,后面判断输出用的 } if((array[i]%5)==2)//被 5 除后余 2 的数字的个数; An[2]+=1; if((array[i]%5)==3)//被 5 除后余 3 的数字的平均数,精确到小数点后 1 位; { An[3]+=array[i]; count=count+1;//统计个数,平均值 输出时处理 } if((array[i]%5)==4)//被 5 除后余 4 的数字中最大数字。 An[4] = (array[i]>An[4]) ? array[i]:An[4];//条件表达式:表达式1? 表达式2:表达式3 } //数据的输出 if((An[0]==0)) printf("N "); else printf("%d ",An[0]); if(t==0) printf("N "); else printf("%d ",An[1]); if((An[2]==0)) printf("N "); else printf("%d ",An[2]); if((An[3]==0)) printf("N "); else printf("%.1lf ",(An[3]*1.0/count)); if((An[4]==0)) printf("N"); else printf("%d",An[4]); return 0; }

     

     

    Processed: 0.011, SQL: 9