为什么在PTA上做题是错的

请你写一段程序,统计各类数字的占比。

提示:输出%时需要用%%才能输出。

输入格式:
只有一行,为用空格分隔的若干整数,最后一个整数为0。测试用例保证输入中只包含这一个0。

输出格式:
共三行,依次分别输出3、5、7的倍数的占比(如果某个数同时为多个数的倍数,如15,70等,则不参与统计,但要计到总数中)。占比采用百分数形式,且保留2位小数。这里的占比指的是这类数字的数量跟所有数字的总数(不包括最后的0)比。测试用例保证所有整数可以用int存储

#include <stdio.h>

int main()
{
   int a=0;
   int y=0;
   int x=0;
   int z=0;
   int i=0;
   double X,Y,Z;
   scanf("%d",&a);
      while (a != 0){
      scanf("%d",&a);
      i=i+1;
      if(a%3==0&&a%5!=0&&a%7!=0)
      x=x+1;
       else if(a%3!=0&&a%5==0&&a%7!=0)
       y=y+1;
        else if(a%3!=0&&a%5!=0&&a%7==0)
       z=z+1;}
       X=x*100/i;
       Y=y*100/i;
       Z=z*100/i;
       printf("%.2lf%%\n",X);
       printf("%.2lf%%\n",Y);
       printf("%.2lf%%\n",Z);
       
       return 0;
}
       

修改如下,供参考:

#include <stdio.h>
int main()
{
   int a,y=0,x=0,z=0,i=0;
   double X,Y,Z;
   while (scanf("%d",&a)==1 && a != 0)
   {
      if(a%3==0&&a%5!=0&&a%7!=0)      x++;
      else if(a%3!=0&&a%5==0&&a%7!=0) y++;
      else if(a%3!=0&&a%5!=0&&a%7==0) z++;
      i++;
   }
   X=1.0*x/i*100;
   Y=1.0*y/i*100;
   Z=1.0*z/i*100;
   printf("%.2lf%%\n",X);
   printf("%.2lf%%\n",Y);
   printf("%.2lf%%\n",Z);
  
   return 0;
}

  • 题目要求输入格式只有一行,为用空格分开的若干整数,且最后一个数为0
  • 代码中的scanf难道是想一个一个的输入吗
  • 我觉得可以用数组来实现