POJ 1004 解题报告

时间:2023-12-16 15:32:56

1.题目描述:

http://poj.org/problem?id=1004

2.解题过程

这个题目咋一看很简单,虽然最终要解出来的确也不难,但是还是稍微有些小把戏在里面,其中最大的把戏就是float 输入的精度问题,比如,一种最简单最直观的的解题方案如下:

#include <stdlib.h>

#include <stdio.h>

 

int main()

{

    int sum = 0;

    float cb_this_month;

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

    {

        scanf("%f",&cb_this_month);

       // printf("%f\n",cb_this_month );

        sum += (int)(cb_this_month*100);

    }

 

    float average = ((int)(sum/12.0+0.5))/100.0;

    printf("$%.2f", average);

 

    return 0;

}

上面的代码看似没有问题,实际问题蛮大,若将程序中注释掉的调试代码加上,可以明显看到,输入的数和实际存入的数是不一样的,如下图:

POJ 1004 解题报告

这将导致最后的结果不准确,在online judge这种死抠的系统里面,我想肯定是过不了的,但是没想到确实过得了,估计这就是传说中的水题吧。我想这道题的彻底解决方案应该是将输入当字符串存进来。