题目描述:
给定一系列正整数,请按要求对数字进行分类,并输出以下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
思路:简单的数字分类,先用if语句写出A1~A5的判断累加语句,再合到while循环里面,最后判断输出
#include <stdio.h>
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int N,A;
int A_1=0,A_2=0,A_3=0,A_5=0;
float ave=0.0,A_4=0.0;
int flag=0;//顺序flag
int sum=0;//A4总个数
cin>>N;
while(N--)
{
cin>>A;
if(0 == A%10)//A1
A_1=A_1+A;
if(1 == A%5)//A2
{
if(1 == flag)
{
A_2=A_2-A;
flag=0;
}
else
{
A_2=A_2+A;
flag=1;
}
}
if(2 == A%5)//A3
A_3++;
if(3 == A%5)//A4
{
sum++;
A_4=A_4+A;
ave=A_4/sum;
}
if(4 == A%5)//A5
{
if(A>A_5)
A_5=A;
}
}
if(0 == A_1)
cout<<'N'<<' ';
else
cout<<A_1<<' ';
if(0 == A_2)
cout<<'N'<<' ';
else
cout<<A_2<<' ';
if(0 == A_3)
cout<<'N'<<' ';
else
cout<<A_3<<' ';
if(0 == A_4)
cout<<'N'<<' ';
else
cout<<setiosflags(ios::fixed)<<setprecision(1)<<ave<<' ';
if(0 == A_5)
cout<<'N'<<endl;
else
cout<<A_5<<endl;
return 0;
}
记录一下做题过程中的几个困难
- 分类A2时,用了 A2=(A2+A)/sum,让A2变成了平均数,应该是A2=A2+A;AVE=A2/SUM;
- 判断输出时,‘N’与0的替换卡了很久,之后使用了cout<<‘N’<<ends;,但是网页的识别程序识别ends时就默认结束了,后来才用了cout<<‘N’<<’ ';