• POJ 1004 解题报告


    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
    ",cb_this_month );
            sum += (int)(cb_this_month*100);
        }
     
        float average = ((int)(sum/12.0+0.5))/100.0;
        printf("$%.2f", average);
     
        return 0;
    }

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

    image

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

  • 相关阅读:
    VS2010 添加项目依赖
    人工鱼群算法 AFSA
    粒子群算法 PSO
    CUDA速度测试
    AGSO 萤火虫算法
    用于WTL工具栏的辅助类CToolBarHelper
    关于结构体内存对齐
    遗传算法 GA
    A*算法
    人工蜂群算法 ABC
  • 原文地址:https://www.cnblogs.com/obama/p/3211771.html
Copyright © 2020-2023  润新知