1012 数字分类 (20 分)
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
思路
- 数组count[5]用来存放五类数字的个数,初值为0
- 数组ans[5]用来存放五类数字的输出结果,初值为0
- 对读入的数字,判断其属于哪一类,令对用的count+1.并处理ans数组的值。
- 注意点
- A1类的count需放到判断其是否为偶数的if语句中
- 最后一个输出后面不能有空格,在本题中容易被忽略
参考代码
#include<stdio.h>
int main(){
int n, a;//a为读入的数据
int count[5] = {0};
int ans[5] = {0};
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d",&a);
if(a % 5 == 0) {//A1类
/*
这里如果把偶数的判断放到上面写成
if((a % 5 == 0) && (a % 2 == 0)){
ans[0] += a;
count[0]++;
}会出现部分错误
*/
if(a % 2 == 0){
ans[0] += a;
count[0]++;
}
}else if(a % 5 == 1){//A2类
if(count[1] % 2 == 0){
ans[1] += a;//这里不能看题目的下标了,因为count是从0开始的
}else{
ans[1] -= a;
}
count[1]++;
}else if(a % 5 == 2){//A3类
count[2]++;
}else if(a % 5 == 3){//A4类
count[3]++;
ans[3] += a;
}else {
if(a > ans[4]){
ans[4] = a;
}
count[4]++;
}
}
if(count[0] == 0) printf("N ");
else printf("%d ",ans[0]);
if(count[1] == 0) printf("N ");
else printf("%d ",ans[1]);
if(count[2] == 0) printf("N ");
else printf("%d ",count[2]);
if(count[3] == 0) printf("N ");
else printf("%.1f ",(double)ans[3] /count[3]);//因为ans和count都是整数型数组,所以要强制其中一个变成double型,这样才有小数
if(count[4] == 0) printf("N");//最后一个无论是n还是数字后面都不能带空格,前面都要带
else printf("%d",ans[4]);
return 0;
}