题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下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”。
样例输入 Copy
13 1 2 3 4 5 6 7 8 9 10 20 16 18
8 1 2 4 5 6 7 9 16
样例输出 Copy
30 11 2 9.7 9
N 11 2 N 9
天啦噜这题我终于找出来了!!!
答案错误只有用极小的数排查,没有头绪就找特殊要求的数,赋特殊值查看
#include<stdio.h>
#define N 1010
int main() {
int n;
while(scanf("%d",&n)!=EOF){//一开始漏掉了天啦噜
int fig;
int sum[N]={0};
int num1=1;
int no[5]={0};
double num3=0.0;
for(int i=0;i<n;i++){
scanf("%d",&fig);
switch(fig%5){
case 0:
if(fig%2==0){
sum[0]+=fig;
no[0]=1;
}
break;
//有余零,但是不是偶数的数,也是这个数不存在,看样例2
case 1:
no[1]=1;
sum[1]+=fig*num1;
num1=-num1;
break;
//6 6 ,两个一加,只有0;输出了N ****************
case 2:
no[2]=1;
sum[2]++;
break;
case 3:
no[3]=1;
sum[3]+=fig;
num3++;
break;
case 4:
no[4]=1;
if(fig>sum[4]) sum[4]=fig;
break;
}
}
int count=0;
for(int i=0;i<5;i++){
count++;
if(!no[i]) printf("N");
else {
if(i==3) printf("%.1f",sum[3]/num3);
else printf("%d",sum[i]);
}
// if(count<n) printf(" ");
// else printf("\n");
if(count==5) printf("\n");
else printf(" ");
}
}
return 0;
}
下面是之前的错的
#include<stdio.h>
//没有改正的
int main(){
int n,b;
while(scanf("%d",&n)!=EOF){
int a[8]={0};
int f=1;
double num=0.0,sum=0.0;
for(int i=0;i<n;i++){
scanf("%d",&b);
//一开始没有仔细读题全是按照个数求的,看样例输出才发现不对
//球球您改改看题看个大概的毛病吧tlu********
//涉及到很多字母的时候用单词就很方便了,不容易记混,也可c0,c1,c2
switch(b%5){
case 0:
if(b%2==0) a[0]+=b;
break;
case 1:
a[1]+=b*f;
f=-f;
break;
case 2:
a[2]++;
break;
case 3:
sum+=b;
num++;
a[3]=1;//因为初始的a[3]=0,如果没有这步输出的是N
break;
case 4:
if(a[4]<b) a[4]=b;
break;
}
}
//for(int i=0;i<n*****;i++){
for(int i=0;i<5;i++){
if(a[i]) {
if(i==3) printf("%.1f ",sum/num);//注意类型
else if(i==5) printf("%d",a[i]);//行末没有空格,宝,好好读题,哭泣
else printf("%d ",a[i]);} //宝你是不是忘了空格tlu**********
else {
if(i==5) printf("%d",a[i]);
else printf("%c ",'N');
}
}
}
return 0;
}