感觉写的没问题,不知道问题出在哪,希望有人帮我找一下,写的有点乱,如果能给我把结构再整理一下就更好了,感谢!
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main() {
vector<int> civec;
int temp, N;
vector<int> oivec(5);
cin >> N;
for (auto i = 0; i != N; ++i) {
cin >> temp;
civec.push_back(temp);
}
int count = 1, count3 = 0;
for (auto i : civec) {
if (i % 5 == 0) {
if (i % 2 == 0) {
oivec[0] += i;
}
}
if (i % 5 == 1) {
oivec[1] += count*i;
count *= -1;
}
if (i % 5 == 2) {
++oivec[2];
}
if (i % 5 == 3) {
oivec[3] += i;
++count3;
}
if (i % 5 == 4) {
if (i > oivec[4]) {
oivec[4] = i;
}
}
}
double oi3 = oivec[3] / (count3*1.0);
for (auto i = 0; i != 5; ++i) {
if (i == 3) {
if (!oi3) {
cout << "N" << " ";
}
else {
cout << setiosflags(ios::fixed) << setprecision(1) << oi3 << " ";
}
}
else {
if (oivec[i] != 0) {
cout << oivec[i];
}
else {
cout << "N";
}
if (i != 4) {
cout << " ";
}
}
}
}
你的主要问题:
1)计算oi3,已经除数为0,溢出了,后面就有异常了
2)有些数值0,是正确的统计结果,最好用-1表示最初的最大值,后面容易判断
if (oivec[i] != 0) {
cout << oivec[i];
}
else {
cout << "N";
}
if (i != 4) { // 这个要提前判断
cout << " ";
}
其它改动的建议见代码:
#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
vector<int> v;
// 我的测试用例
// v.insert(v.begin(), {30, 5, 17, 14, 23, 20, 21, 16, 27, 13, 44, 31});
int N;
cin >> N;
for (auto i = 0; i != N; ++i)
{
int temp;
cin >> temp;
v.push_back(temp);
}
int a1 = 0; // 被5整除的偶数之和
int count_a2 = 0; // 便于交错求和
int a2 = 0; // 余1情况,交错求和
int a3 = 0; // 余2,统计个数
int count_a4 = 0;
int a4 = 0; // 余3,先求和,用于后面求平均数
int a5 = -1; // 余4,找最大的数
for (auto temp : v)
{
switch(temp % 5)
{
case 0:
if (temp % 2 == 0)
{
a1 += temp;
}
break;
case 1:
a2 += (count_a2 % 2 == 0 ? 1 : -1 ) * temp;
++count_a2;
break;
case 2:
++a3;
break;
case 3:
a4 += temp;
++count_a4;
break;
case 4:
if (temp > a5)
{
a5 = temp;
}
break;
}
}
cout << a1 << ' ' << a2 << ' ' << a3 << ' ';
if(count_a4 == 0)
{
cout << 'N' << ' ';
}
else
{
cout << setiosflags(ios::fixed) << setprecision(1) << a4 * 1.0 / count_a4 << ' ';
}
if(a5 == -1)
cout << 'N';
else
cout << a5;
}
仅供参考
#include <iostream>
#include <cmath>
using namespace std;
int main(){
int N,s1=0,s2=0,tmp,cnt1=0,cnt2=0,cnt3=0,max=0,f1=0,f2=0,f3=0,f4=0,f5=0; cin>>N;
double s3=0.0;
do{
cin>>tmp;
if(tmp%5==0&&tmp%2==0){
s1+=tmp; f1=1;
}
if(tmp%5==1){
cnt1++; s2+=tmp*pow(-1,cnt1-1); f2=1;
}
if(tmp%5==2){
f3=1; cnt2++;
}
if(tmp%5==3){
cnt3++; s3+=tmp; f4=1;
}
if(tmp%5==4&&max<tmp){
f5=1; max=tmp;
}
}while(getchar()!='\n');
if(f1==1) cout<<s1;
if(f1==0) cout<<"N";
if(f2==1) cout<<" "<<s2;
if(f2==0) cout<<" N";
if(f3==1) cout<<" "<<cnt2;
if(f3==0) cout<<" N";
if(f4==1) printf(" %.1lf",s3/cnt3);
if(f4==0) cout<<" N";
if(f5==1) cout<<" "<<max;
if(f5==0) cout<<" N";
return 0;
}