为什么WA了?求助

P5719 【深基4.例3】分类平均

一贺栗令人 @ 2021-07-05 22:00:58

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    int n, k, ans = 0, sum = 0, num = 0, dim = 0;
    cin >> n >> k;
    for (int i = 0; i < n; i++) {
        if (i % k == 0) {
           ans += i;
        } else {
           sum += i;
        }
    }
    for (int i = 0; i < ans; i++) {
        num += i;
        num = num / ans;
    }
    for (int i = 0; i < sum; i++) {
        dim += i;
        dim = dim / sum;
    }
    cout << fixed << setprecision(1) << num << " " << dim << endl;
    return 0;
}

by coldy_rainy @ 2021-07-12 17:40:38

@一贺栗令人 你这个程序有几处错误的地方,我来给你指出来吧(下次注意一下): 1.在这个地方:

 for (int i = 0; i < n; i++)

题目中说的是从1到n的正整数,不能从0开始,到n-1结束。违背了题目的意思。应改成:

 for (int i = 1; i <=n; i++)

2.这个地方:

int n, k, ans = 0, sum = 0, num = 0, dim = 0;

定义中的:num,dim应该定成小数double; 否则下面的

 fixed << setprecision(1) 

就是不对的。 3. 这里:

num = num / ans;
dim=dim/sum

也是不对的。当“/”的两边都为正数时,为整除运算,不符合要求,应该为:

num=num*1.0/ans;
dim=dim*1.0/sum;

才符合要求

4.另外,这串代码:

for (int i = 0; i < ans; i++) {
        num += i;
        num = num / ans;
    }
    for (int i = 0; i < sum; i++) {
        dim += i;
        dim = dim / sum;
    }

这里的num与dim既加了i又除以了ans与dim,应该用另一个变量代替

总之,做代码是要认真思考,认真检查的,不能匆匆而就。 也许有什么错误是我还没有揪出的,请认真复查啊

加油!!!!


by coldy_rainy @ 2021-07-12 17:47:18

@一贺栗令人 建议改成这种形式,既简短又简单:

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    double num,dim;
    int n, k, ans = 0, sum = 0,ac=0,bc=0;//新添ac与bc分别代表a,b类数个数 
    cin >> n >> k;
    for (int i = 1; i <=n; i++) {
        if (i % k == 0) {
           ans += i;
            ac++;//记录a类数个数 
        } else {
           sum += i;
           bc++;//同理 
        }
    }
    num=ans*1.0/ac;
    dim=sum*1.0/bc;
    //for (int i = 0; i < ans; i++) {
    //    num += i;
    //    num = num / ans;
    //}
    //for (int i = 0; i < sum; i++) {
    //    dim += i;
    //    dim = dim / sum;
    //}
    cout << fixed << setprecision(1) << num << " " << dim << endl;
    return 0;
}

|