基础实验2-2.1 整数的分类处理 - 浙大版《数据结构学习与实验指导(第2版)》题目集 (pintia.cn)
给定 N 个正整数,要求你从中得到下列三种计算结果:
- A1 = 能被 3 整除的最大整数
- A2 = 存在整数 K 使之可以表示为 3K+1 的整数的个数
- A3 = 存在整数 K 使之可以表示为 3K+2 的所有整数的平均值(精确到小数点后 1 位)
输入格式:
输入首先在第一行给出一个正整数 N,随后一行给出 N 个正整数。所有数字都不超过 100,同行数字以空格分隔。
输出格式:
在一行中顺序输出 A1、A2、A3的值,其间以 1 个空格分隔。如果某个数字不存在,则对应输出NONE
。
输入样例 1:
8
5 8 7 6 9 1 3 10
输出样例 1:
9 3 6.5
输入样例 2:
8
15 18 7 6 9 1 3 10
输出样例 2:
18 3 NONE
题解
主要理解计算部分:
-
A1:在这 N 个正整数中,找到能被 3 整除的最大整数。如果不存在能被 3 整除的数,A1 就为
NONE
。 -
A2:统计这 N 个正整数中,存在整数 K 使得该数可以表示为 3K+1 形式的整数的个数。
-
A3:计算这 N 个正整数中,存在整数 K 使得该数可以表示为 3K+2 形式的所有整数的平均值,并且精确到小数点后 1 位。如果不存在这样的数,A3 就为
NONE
。
需要注意的是,在计算 A3
时,若不存在满足 3K+2 形式的数(即 count 为 0),直接进行 sum/(count*1.0)` 计算会引发除零错误。所以在计算之前要先检查 count 是否为 0。
代码
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin>>n;
int A1=-1;//能被 3 整除的最大整数
int A2=0;//存在整数 K 使之可以表示为 3K+1 的整数的个数
double A3=-1.0;//存在整数 K 使之可以表示为 3K+2 的所有整数的平均值
int num[n];
int sum=0,count=0;
for(int i=0;i<n;i++){
cin>>num[i];
if(num[i]%3==0){
A1 = A1<num[i] ? num[i] : A1;
}
if(num[i]%3==1){
A2++;
}
if(num[i]%3==2){
sum+=num[i];
count++;
}
}
if(count!=0){
A3=sum/(count*1.0);
}
if(A1!=-1) cout<<A1<<" ";
else cout<<"NONE"<<" ";
if(A2) cout<<A2<<" ";
else cout<<"NONE"<<" ";
if(A3!=-1.0) printf("%.1lf",A3);
else cout<<"NONE";
return 0;
}