爆刷PAT(甲级)——之【1011】 World Cup Betting (20)——C++,循环

艰难的英语单词:      tie         英 [taɪ]         平局 n.

题意:   给出三局游戏,每局游戏三个赌注,每个赌注分别叫做 W T L ,每局游戏每个赌注都有倍率,问怎么投使得最赚。输出每局游戏选择的W T L,以及最大利润即可。

难点:没有难点。两个循环。

       但是发现一个很奇怪的bug。

       对于题目给定的测试样例:   

1.1 2.5 1.7
1.2 3.0 1.6
4.1 1.2 1.1

  应该输出 

37.98

但是我写的代码,如果加上一句pintf进行中间Debug输出过程查看,最终结果就会变成 37.97。注释掉这个 printf  就会变回37.98,迷的不行。是系统的编译器问题,但是具体原因我没有花精力探讨。(刚开始没发现这点,我还以为本题要四舍五入输出。。结果并不需要,还白WA了一发。。。)这个问题就晾在这里好了,诡异的BUG坐等江湖道友有兴趣指点一二~~~

Code:  (AC代码)

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define inf 10009
#define INF 0x3f3f3f3f
#define loop(x,y,z) for(x=y;x<z;x++)

int game[3];//投注方法
double num[3];
double ans=1;

void Input()
{
    int i,j,k;
    loop(i,0,3)
    {
        scanf("%lf%lf%lf",&num[0],&num[1],&num[2]);
        k=0;
        loop(j,1,3)
            if(num[j]>num[k])k=j;
        game[i]=k;//这局游戏j最大
        ans*=num[k];//printf("%.2f\n",ans);
    }
    ans=(ans*0.65-1)*2;
}

void Output()
{
    int i;
    loop(i,0,3)
        if(game[i]==0)
        printf("W ");
        else if(game[i]==1)
        printf("T ");
        else
        printf("L ");
    //ans=(ans*100)+0.5;
    //ans/=100;
    printf("%.2f\n",ans);
}

int main()
{
    Input();
    Output();
    return 0;
}

取消掉上面的注释,就会出现37.97了。。。就是这样的截图:

诡异emmmm......

猜你喜欢

转载自blog.csdn.net/Hide_in_Code/article/details/81609171