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

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章