题目链接在此。
题意
此处就说通俗的意思,其实从样例来看比较好懂一些……
给出三行数据,代表三场比赛。每行有三个浮点数,从左到右分别代表W(win), T(tie),L(lose)。现在需要从每行的W,T,L中选择最大的数,并输出每行选的哪一个。设每行的最大数分别为a,b,c,最后输出(a*b*c*0.65-1)*2的值,保留两位小数。
思路
我的思路是用了三个数组a,b,c来保存输入,并且a[3],b[3],c[3]用来保存每行的最大值,a_index, b_index, c_index 用来保存最大值所在的下标,mp用来保存W,T,L到数组的映射,这样方便输出。
AC代码
#include<stdio.h>
int mp[3] = {'W','T','L'};
int main(){
double a[4] = {0},b[4] = {0},c[4] = {0};
int a_index, b_index, c_index;
scanf("%lf %lf %lf",a,a+1,a+2);
scanf("%lf %lf %lf",b,b+1,b+2);
scanf("%lf %lf %lf",c,c+1,c+2);
for(int i = 0 ; i < 3; i++){
if(a[i] > a[3]) { a[3] = a[i]; a_index = i;}
if(b[i] > b[3]) { b[3] = b[i]; b_index = i;}
if(c[i] > c[3]) { c[3] = c[i]; c_index = i;}
}
double ans = (a[3]*b[3]*c[3]*0.65-1)*2;
printf("%c %c %c %.2f\n",mp[a_index],mp[b_index],mp[c_index],ans);
return 0;
}
疑问
我在自己的机器上跑出来的样例的结果是37.97(37.9750),不明白%.nf这种是如何舍入进位的,在此恳请知道的大神点拨一下~
附
《算法笔记》的思路:
令ans记录最大收益,初值为1.0。
每读入一行,就找出该行最大值,并输出其所在下标对应的W,T,L,同时令ans累乘该最大值。
最后输出(ans*0.65-1)*2即可。