给定一系列正整数,请按要求对数字进行分类,并输出以下 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
题目分析:
主要根据输入数字的要求依次输出,这里采用vector容器的优势,不仅可以快速得到一组数的长度,而且操作较为简便。
代码演示:
#define _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
int main()
{
int data;
vector<int> arr[5];
int num0 = 0, num1 = 0, num4 = 0;
double num3 = 0.0;
int flag = 0;
int num;
cin >> num;
for (int j = 0; j < num; j++)
{
//根据输入的数字对5进行取模操作按照对应的位置进行存储数据
cin >> data;
arr[data % 5].push_back(data);
}
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < arr[i].size(); j++)
{
//这里则是根据题目的要求进行对应的操作
switch (i)
{
case 0:
if (arr[i][j] % 2 == 0)
num1 += arr[i][j];
break;
case 1:if (flag == 0) {
num += arr[i][j];
flag = 1;
}else {
num1 -= arr[i][j];
flag = 0;
}
break;
case 3: num4 = num4 + arr[i][j];
break;
case 4:if (arr[i][j] > num4)
num4 = arr[i][j];
}
}
}
for (int i = 0; i < 5; i++) {
if (i != 0) printf(" ");
//vector的优势体现在此,它可以通过是否有长度来判断是否对其压入数据,从而来进行输出“N”的操作。
if (i == 0 && num0 == 0 || i != 0 && arr[i].size() == 0) {
printf("N"); continue;
}
if (i == 0) printf("%d", num0);
if (i == 1) printf("%d", num1);
if (i == 2) printf("%d", arr[2].size());
if (i == 3) printf("%.1f", num3 / arr[3].size());
if (i == 4) printf("%d", num4);
}
return 0;
}