题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下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
-
题目要求
输入一个N,紧接着同一行输入N个数,这些数如果满足A1~A5,则输出结果,否则输出N -
主要思路
每输入一个数,就加进来判断结果
利用f1~f5标识是否存在题意5类数
A1 :if(x%5==0&&x%2==0){ f1=1; a1+=x; }
A2:注意正负交错,只需每次乘以一个-1
if(x%5==1){ f2=1; a2+=x*temp; temp*=-1; }
A3:
if(x%5==2){ f3=1; a3++; }
A4:注意其求平均数,循环累加比较麻烦,但可以在循环外面计算,直接总和除以个数;另外注意结果是浮点数,所以定义为double型变量
if(x%5==3){ f4++; a4+=x; }
if(f4!=0) printf("%.1lf ",a4/f4); else cout<<"N"<<" ";
A5:
if(x%5==4){ f5=1; if(x>a5) a5=x; }
-
完整代码
#include<iostream> #include<stdio.h> using namespace std; int main(){ int n,x; int i,j; int a1,a2,a3,a5; double a4;//计算A1,A2,A3,A4,A5 int f1,f2,f3,f4,f5;//标识是否存在 while(cin>>n){ int temp=1;//A2交错级数 f1=f2=f3=f4=f5=0; //判断A1是否存在 int a1=a2=a3=a4=a5=0; for(j=0;j<n;j++){ cin>>x; if(x%5==0&&x%2==0){ f1=1; a1+=x; } //判断A2是否存在 if(x%5==1){ f2=1; a2+=x*temp; temp*=-1; } //判断A3是否存在 if(x%5==2){ f3=1; a3++; } //判断A4是否存在 if(x%5==3){ f4++; a4+=x; } //判断A5是否存在 if(x%5==4){ f5=1; if(x>a5) a5=x; } } if(f1!=0) cout<<a1<<" "; else cout<<"N"<<" "; if(f2!=0) cout<<a2<<" "; else cout<<"N"<<" "; if(f3!=0) cout<<a3<<" "; else cout<<"N"<<" "; if(f4!=0) printf("%.1lf ",a4/f4*1.0); else cout<<"N"<<" "; if(f5!=0) cout<<a5<<endl; else cout<<"N"<<endl; } return 0; }