一贺栗令人 @ 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;
}
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;
}