累加器为什么从-1开始才能得80分,如果从0开始,全WA

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

极冰企鹅 @ 2023-06-27 20:15:23

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long n, k, ca = -1, cb = -1, a = 0, b = 0;
    cin >> n >> k;
    while (n--) {
        if (n % k == 0) {
            // A类数
            ca++;
            a += n;
        } else {
            // B类数
            cb++;
            b += n;
        }
    }
    cout << fixed << setprecision(1) << (a*1.0) / ca << ' ' << (b*1.0) / cb << endl;
}

by 极冰企鹅 @ 2023-06-27 20:19:14

用for循环就没有问题

#include <bits/stdc++.h>
using namespace std;

int main() {
    long long ca = 0, cb = 0, a = 0, b = 0;
    int n, k;
    cin >> n >> k;
    for (int i=1;i<=n;i++) {
        if (i % k == 0) {
            // A类数
            ca++;
            a += i;
        } else {
            // B类数
            cb++;
            b += i;
        }
    }
    cout << fixed << setprecision(1) << (a * 1.0) / ca << ' ' << (b * 1.0) / cb << endl;
}

by 极冰企鹅 @ 2023-06-27 20:24:51

明白了,下面两个脚本运行的结果不一样。

while(n--){
    cout<<n<<endl;
}
while(n){
    cout<<n<<endl;
    n--;
}

by sunnygreen @ 2023-06-27 21:18:51

while(n--) 执行完 n 会减一


|