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;
}