题目
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
代码及思路
本来打算在输入时直接计算各类数字的结果,后来觉得那样做代码很杂乱,所以选择先输入数据,并根据除5的余数进行分类。然后再一次循环,根据每个数据的分类进行相应的运算。其中A2较为麻烦,需要判断正负号,我的做法是记录A2类型的数字个数A2num,当A2num是奇数是为正,偶数为负。还有就是A4进行除法时,注意要把A4类型数字个数×1.0再运算,这样会得到double型数据,否则得到的是int型数据。控制精度采用的是#include <iomanip> cout<<fixed<<setprecision(1)<<outcome3;
之前采用的是初始化运算结果为0,然后在输出结果时检测到结果为0 则判断该类型数字不存在,输出“N”,但是忽略了结果刚好为0的情况,所以第一次提交最后一个测试点没有通过。还是老老实实的计数判断各类型数字是否存在。
//最初用0做标志位,忽略了该类型数字存在但是计算结果刚好等于0的情况 所以最后一个测试用例提交错误
#include<iostream>
#include <iomanip>
using namespace std;
int main()
{
int N;
cin>>N;//数字个数
int num[N];
int sort[N];
int outcome[5];
int i;
int A1num = 0;
int A2num = 0;
int A3num = 0;
int A4num = 0;
int A5num = 0;
for(i=0;i<5;i++) outcome[i] = 0;//结果数组初始化
for(i=0;i<N;i++)
{
cin>>num[i];//输入数据
sort[i] = num[i]%5+1;//数据分类
}
for(i=0;i<N;i++)
{
if(sort[i] == 1)//A1 偶数和
{
if(num[i]%2==0)
{
A1num++;
outcome[0] = outcome[0] + num[i];
}
}
else if(sort[i] == 2)//A2 交替求和
{
A2num++;
if(A2num%2!=0)//奇数 正号
outcome[1] = outcome[1] + num[i];
else//偶数 正号
outcome[1] = outcome[1] - num[i];
}
else if(sort[i] == 3)//A3 个数
{
A3num++;
outcome[2]++;
}
else if(sort[i] == 4)//A4 平均数 先求和
{
A4num++;
outcome[3] = outcome[3] + num[i];
}
else
{
A5num++;
if(num[i]>outcome[4])
outcome[4] = num[i];
}
}
if(A1num != 0)
cout<<outcome[0]<<" ";
else
cout<<"N"<<" ";
if(A2num != 0)
cout<<outcome[1]<<" ";
else
cout<<"N"<<" ";
if(A3num != 0)
cout<<outcome[2]<<" ";
else
cout<<"N"<<" ";
if(A4num != 0)
{
double outcome3 = outcome[3] / (A4num * 1.0);
cout<<fixed<<setprecision(1)<<outcome3<<" ";
}
else
cout<<"N"<<" ";
if(A5num != 0)
cout<<outcome[4];
else
cout<<"N";
return 0;
}
收获
C++中控制输出数据精度的方法
#include <iomanip>
cout<<fixed<<setprecision(1)<<double类型数据;