@[TOC] 【PAT-B1012】数字分类——c++满分题解
题目描述 解题思路初始化数组A[n] {},用与存储满足各种条件的数的运算,定义变量 c1 = -1, c2 = 0
A1:是所有能整数5的偶数的和,也就是能整除10的数的和;
A2:设置一个变量c1,调整满足被3整除数的正负进行相加;
A3:A[2]++;即可(A[n]初始值为0);
A4:A[3]用于存储满足条件的数的和,c2++来记录满足条件的数的个数;
A5:取满足对5取模得4,且大于当前A[4]的数。
输出时,可以使用三目运算符进行简化代码;
注意:在实验很多次发现第八个测试点会出现A2和为0的情况,这个情况点要单独处理
A
?
B
:
C
A ? B : C
A ? B : C
#include运行结果using namespace std; using gg = long long; int main(){ ios::sync_with_stdio(false); cin.tie(0); gg n, c1 = -1,c2 = 0, c3 = 0, t, A[5] {}; cin >> n; for(gg i = 0; i < n; i++){ cin >> t; gg z = t % 5; if(t % 10 == 0){ A[0] += t; } else if(z == 1){ c1 *= -1; A[1] += t * c1; c3++; //A2可能和为0,第八个测试点 } else if(z == 2){ A[2]++; } else if(z == 3){ c2++; A[3] += t; } else if(z == 4 && t > A[4]){ A[4] = t; } } for(gg i = 0; i < 5; i++){ cout << (i == 0 ? "":" "); if(i == 1 && c3 > 0){ //单独考虑A2为0的情况 cout << A[i]; } else if(A[i] == 0){ cout << "N"; } else{ cout << fixed << setprecision(i==3 ? 1 : 0) << (i==3 ? A[i] * 1.0 / c2 : A[i]); } } return 0; }



