程序员测试题:PAT 乙级 1012 数字分类 (C语言版本)
PTA题目
思路:
完全按照题意写就行,就是这里测试了一下goto的用法
#include <stdio.h>
#include <string.h>
float fun4(float sum,int ave)
{
float x=0.0f;
if(ave!=0)
x=sum/ave;
return x;
}
int fun5(int max,int a[])
{
int i;
int temp;
for(i=0;i<=max;i++)
{
if(a[i]>temp)
temp = a[i];
}
return temp;
}
int main()
{
int arr[1001] = {0};
int num=0;
char ch;
int i;
while(scanf("%d",&arr[num])!=EOF)
{
num++;
if(getchar()!=' ')
break;
}
// for(i=0;i<num;i++)
// {
// printf("%d ",arr[i]);
// }
int a1=0,a2=0,a3=0,a5[1001]={0};
float a4=0;
int flag=1;//a2的奇数+偶数-的标志位
int flag1=-1; //a2是否存在
int ave=0;//a4的分母
int max=0,a5value;//a5记录次数
for(i=1;i<=arr[0];i++)//arr[0]代表总共输入的数量
{
if((arr[i]%5==0)&&(arr[i]%2==0))
{
a1 += arr[i];
}
if((arr[i]%5==1))
{
flag1 = 1;//进入判断flag置1,防止正负相加出现a2=0的情况。
if(flag==1)
{
a2 += arr[i];
flag = 0;
}
else
{
a2 -= arr[i];
flag = 1;
}
}
if((arr[i]%5)==2)
{
a3++;
}
if((arr[i]%5)==3)
{
ave=ave+1;
a4 += arr[i];
}
if((arr[i]%5==4))
{
a5[max]=arr[i];
max++;
}
}
a4 = fun4(a4,ave);
a5value = fun5(max,a5);
int t=1;
if(a1==0||flag1==-1||a3==0||a4==0||a5value==0)
t=0;
switch (t)
{
case 1: goto all;
}
a1==0?printf("N "):printf("%d ",a1);
flag1==-1?printf("N "):printf("%d ",a2);
a3==0?printf("N "):printf("%d ",a3);
a4==0?printf("N "):printf("%.1f ",a4);
a5value==0?printf("N"):printf("%d",a5value);
all:
if(t==1)
printf("%d %d %d %.1f %d",a1,a2,a3,a4,a5value);
return 0;
}