关于B的平均数的求法的疑问

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

BlakrPander @ 2020-10-13 19:43:05

先贴上代码。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int n,k;
    float A=0,B=0;
    float cA=0,cB=0;
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        if(i%k==0){
            A+=i;
            cA++;
        }
/*      else{
            B+=i;
            cB++;
        }*/
    }
    float sum=(1+n)*n/2;
    float b=(sum-A)/(n-cA),a=A/cA;
    printf("%.1f %.1f",a,b);
    return 0; 
}

注释中的是我原来求B的方法,然后b是用

b=B/cB;

来求的,但是在过题的时候只有四十分。第一个WA的数据输入是10000 19,而答案最后的b是5000.2。

我的代码里第一次求b的方法求出来b=5000.0,而换了之后b就是5000.2了,请问这是为啥....。


by Wu_Ren @ 2020-10-13 20:36:14

@BlakrPander 精度问题,float是单精度浮点数,在整数部分较大时精度丢失严重

这边的建议是把float换成double

然后把

printf("%.1f %.1f",a,b);

换成

printf("%.1lf %.1lf",a,b);

by BlakrPander @ 2020-10-13 21:53:10

@Wu_Ren 好的好的 谢谢大佬


|