1012 数字分类 (20分)
给定一系列正整数,请按要求对数字进行分类,并输出以下 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
题目分析:
1.根据输入加入5个判断条件,把对应的结果组合出来。
2.输出结果时要注意N的问题
代码:
源码地址:https://github.com/MrHaddis/PAT1012
#include <stdio.h>
//MrHaddis
//https://github.com/MrHaddis/PAT1012
int main() {
//每个输入的值
int number = 0;
//获取多少次输入
int numberSize = 0;
//A4的平均值
double averageA4;
scanf("%d", &numberSize);
//边界条件
if (numberSize > 1000) {
return 0;
}
//A1~A5的结果
int resultA1 = 0;
int resultA2 = 0;
int resultA3 = 0;
double resultA4 = 0.0;
int resultA5 = 0;
//记录
int indexA1 = 0;
int indexA2 = 0;
int indexA4 = 0;
//循环
for (int i = 0; i < numberSize; i++) {
scanf("%d", &number);
//A1
if (number % 10 == 0) {
resultA1 += number;
indexA1++;
}
//A2
if (number % 5 == 1) {
if (indexA2 == 2) {
resultA2 -= number;
indexA2 = 1;
} else {
resultA2 += number;
indexA2 = 2;
}
}
//A3
if (number % 5 == 2) {
resultA3++;
}
//A4
if (number % 5 == 3) {
indexA4++;
resultA4 += number;
}
//A5
if (number % 5 == 4) {
if (number > resultA5) {
resultA5 = number;
}
}
}
//输出
if (indexA1 > 0) {
printf("%d ", resultA1);
} else {
printf("N ");
}
//这里需要注意的是有可能结果是0的存在,这时不能输出N
if (indexA2 > 0) {
printf("%d ", resultA2);
} else {
printf("N ");
}
if (resultA3 == 0) {
printf("N ");
} else {
printf("%d ", resultA3);
}
if (resultA4 == 0) {
printf("N ");
} else {
//求平均值
averageA4 = resultA4 / indexA4;
printf("%.1f ", averageA4);
}
if (resultA5 == 0) {
printf("N");
} else {
printf("%d", resultA5);
}
return 0;
}