1012 数字分类 (20 分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
分析:
这个题是真的累,已经做过一遍在做一遍还是错误连连,比较注意的一点应该是第三类数字是小数,但除数和被除数都是整数,总忘记转换类型。
1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cmath> 6 using namespace std; 7 int main() 8 { 9 int n,a[1001]; 10 cin>>n; 11 int num[5][1000]; 12 int f[5]={0},s[5]={0}; 13 double s3; 14 15 for(int i=0;i<n;i++) 16 { 17 cin>>a[i]; 18 int x=a[i]%5; 19 switch(x) 20 { 21 case 0: 22 if(a[i]%2==0) 23 num[0][f[0]++]=a[i]; 24 break; 25 case 1: 26 num[1][f[1]++]=a[i]; 27 break; 28 case 2: 29 num[2][f[2]++]=a[i]; 30 break; 31 case 3: 32 num[3][f[3]++]=a[i]; 33 break; 34 case 4: 35 num[4][f[4]++]=a[i]; 36 break; 37 } 38 39 } 40 41 for(int i=0;i<f[0];i++) 42 { 43 s[0]+=num[0][i]; 44 } 45 if(f[0]!=0) 46 cout<<s[0]<<' '; 47 else 48 cout<<"N "; 49 for(int i=0;i<f[1];i++) 50 { 51 s[1]+=pow(-1,i)*num[1][i]; 52 } 53 if(f[1]!=0) 54 cout<<s[1]<<' '; 55 else 56 cout<<"N "; 57 s[2]=f[2]; 58 if(f[2]!=0) 59 cout<<s[2]<<' '; 60 else 61 cout<<"N "; 62 for(int i=0;i<f[3];i++) 63 { 64 s[3]+=num[3][i]; 65 } 66 s3=(double)s[3]/f[3]; 67 if(f[3]!=0) 68 printf("%.1f ",s3); 69 else 70 cout<<"N "; 71 for(int k=1;k<f[4];k++) 72 { 73 if(num[4][k]>num[4][0]) 74 num[4][0]=num[4][k]; 75 } 76 s[4]=num[4][0]; 77 if(f[4]!=0) 78 cout<<s[4]; 79 else 80 cout<<'N'; 81 }