PAT1012 数字分类 (20 分)

测试点8 错误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
第一次提交测试点8有问题,在网上参考后,说是在A2条件下和为0不是当作N输出,而是把2输出,为此我设置了一个记录A2count来记录符合A2条件的数(新手可能写的代码让人笑,不要介意)

#include<stdio.h>
int main()
{
	int A1=0,A2=0,A3=0,A5=0;
	double A4=0;	
	int number,i,n,sign=1,A4count=0,A2count=0;
	scanf("%d",&number);
	for(i=0;i<number;i++)
	{
		scanf("%d",&n);
		if(n%5==0)
		{
			if(n%2==0)
			{
				A1+=n;
			}
		}
		else if(n%5==1)
		{
			A2+=sign*n;
			sign*=-1;//设置sign逐次*-1,达到交错求和 
			A2count++;//只要count>0就表示不输出N 
		}
		else if(n%5==2)
		{
			A3++;
		}
		else if(n%5==3)
		{
			A4+=n;
			A4count++;//记录数字,方便最后的平均 
		}
		else 
		{
			if(A5<n)
			A5=n;
		}
	}
	if(A4)
	{
		A4=A4*1.0/A4count;
	}
	if(A1)
	{
		printf("%d",A1);
	}
	else
	printf("N");
	if(A2count)
	{
		printf(" %d",A2);
	}
	else
	printf(" N");
		if(A3)
	{
		printf(" %d",A3);
	}
	else
	printf(" N");
			if(A4)
	{
		printf(" %.1f",A4);
	}
	else
	printf(" N");
			if(A5)
	{
		printf(" %d",A5);
	}
	else
	printf(" N");
} 

猜你喜欢

转载自blog.csdn.net/AXKDD6555/article/details/89492121
今日推荐