PAT A1011 World Cup betting

PAT A1011 World Cup betting 两个版本

书上的版本,我是自己的ac了才看这个的,发现这个版本更好

//hufan写的很好,更深刻理解了边输入数据边输出结果 
//ac了 
#include<stdio.h>
char S[3]={'W','T','L'};//我去这个方法又忘记了,s[0]='W',s[1]='T',s[2]='L'
int main(){
	double ans=1.0,temp,a;//特别注意ans是要乘的,所以初值为1 
	int idx;//记录每行最大数字的下标
	for(int i=0;i<3;i++){
		temp=0.0;
		for(int j=0;j<3;j++){
			scanf("%lf",&a);
			if(a>temp){
				temp=a;
				idx=j;
			}
		}
		ans*=temp;//按公式累乘,这里一开始写成了ans*temp,结果居然可以编译,但是运行就错了 
		printf("%c ",S[idx]);//这个时候就输出结果了,值得好好看!注意格式化:%c 
	}
	printf("%.2f",(ans*0.65-1)*2);//输出最大收益
	return 0; 
} 



我的版本

#include<stdio.h>

//ac了,不过我的答案是T T W 37.97。而样例给出的答案是T T W 37.98
//设置三个数组,求出每一组max概率分别为a,b,c,同时存放每一组的胜负情况于ans[]的0,1,2中。
//然后a*b*c相乘存放在result,元素值是0,则输出w,如果是1,则输出t,如果是2,则输出l
//#define LOCAL
int main(){
    #ifdef LOCAL
    freopen("A1011data.in","r",stdin);
    freopen("A1011data.out","w",stdout);
    #endif
    float caseline[3]={0.0},max[3]={0.0};//注意概率的数组是小数数组,0下标是W的概率,1的下标是T的概率,2的下标是L的概率.
    int ans[3]={0};//ans[3]存放每一个case的胜负结果的代号
    float result=0.0;
    for(int i=0;i<3;i++){
        scanf("%f%f%f",&caseline[0],&caseline[1],&caseline[2]);
        max[i]=caseline[0];
        for(int j=0;j<3;j++){
            if(caseline[j]>max[i]){
                max[i]=caseline[j];
                ans[i]=j;//这里存的是胜负平的代号
            }
       }
    }
    for(int i=0;i<3;i++){
        if(ans[i]==0) printf("W ");
        else if(ans[i]==1) printf("T ");
        else if(ans[i]==2) printf("L ");
    }
    result=(max[0]*max[1]*max[2]*0.65-1)*2;
    printf("%.2f",result);
    return 0;    
}

你可能感兴趣的:(C++,算法,pat)