PAT乙级1012.数字分类

  1. 数字分类 (20)
    时间限制
    100 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    CHEN, Yue
    给定一系列正整数,请按要求对数字进行分类,并输出以下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

思路:
常规题型,但是要注意细节,尤其A2这个点, 正负交错相加有可能会等于0, 这个点卡了很久一个点过不了,牛客上测试不严全过了,要与不存在区分开来,所以引入了一个count2来记录是否存在

#include<cstdio>
int main()
{
  int A[1001];
  int A1=0,A2=0,A3=0,A4=0,A5=0;int k=1;int n=0;int max=0;int i=0;int count2=0;
  int N;
  while(scanf("%d",&N)!=EOF)
  {
    for( i=0;i<N;i++)
    {
      scanf("%d",&A[i]);

      if(A[i]%5==0&&A[i]%2==0)
      {
        A1+=A[i];
      }
    else if(A[i]%5==1)
      {
        A2+=k*A[i];
        k*=-1;
        count2++;
      }
    else if(A[i]%5==2)
      {
        A3++;
      }
    else  if(A[i]%5==3)
      {
        A4+=A[i];
        n++;
      }
    else if(A[i]%5==4)
      {
        if(A[i]>max)
        max=A[i];
      }
      A5=max;
  }//for
    if(A1==0) printf("N ");
    else printf("%d ",A1);
    if(count2==0) printf("N ");
    else printf("%d ",A2);
    if(A3==0) printf("N ");
    else printf("%d ",A3);
    if(A4==0) printf("N ");
    else printf("%.1f ",(double)A4/n);
    if(A5==0) printf("N");
    else printf("%d",A5);

  }//while
  return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37999723/article/details/79998456