题目描述
给定一系列正整数,请按要求对数字进行分类,并输出以下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”。
输入例子:
13 1 2 3 4 5 6 7 8 9 10 20 16 18
输出例子:
30 11 2 9.7 9
题目分析
1.A4要求求平均值,还要限制输出位数,需要函数
#include <iomanip> //控制小数位数的头文件
cout<<fixed<<setprecision(1)<<a[3]/flag;//输出一位小数
2.整体有5种可能,所以采用switch语句可能较为方便。
3.输出代码,可以采用三元运算符。(看的别人代码,觉得很简洁,在此摘录)
(a[0]>0)?(cout<<a[0]<<" "):(cout<<"N ");
(a[1]!=0)?(cout<<a[1]<<" "):(cout<<"N ");
(a[2]>0)?(cout<<a[2]<<" "):(cout<<"N ");
(a[3]>0)?(cout<<fixed<<setprecision(1)<<a[3]/flag<<" "):(cout<<"N ");
(a[4]>0)?(cout<<a[4]):(cout<<"N");
代码:
#include<iostream>
#include<cmath>
#include <iomanip>
using namespace std;
int main()
{
int n,a[5]={0};
int count=0;
float flag=0;
cin>>n;
int x;
for(int i=0;i<n;i++)
{
cin>>x;
switch(x%5){
case 0:{
if(x%2==0)
{
a[0]+=x;
}
break;
}
case 1:{
a[1]+=pow(-1,count)*x;
count++;
break;
}
case 2:{
a[2]++;
break;
}
case 3:{
a[3]+=x;
flag++;
break;
}
case 4:{
if(x>a[4])
{
a[4]=x;
}
break;
}
}
}
for(int j=0;j<5;j++)
{
if(a[j]!=0){
if(j==3){
cout<<fixed<<setprecision(1)<<a[3]/flag<<" ";
continue;
}
cout<<a[j];
}
else{
cout<<"N";
}
if(j<4)
cout<<" ";
}
return 0;
}