B3932 [语言月赛 202402] 酒 题解

· · 题解

简化题意

给你七个浮点数 a,b,c,d,e,f,x,y

ax+bycydy+e 哪个最大就输出哪个的编号和值。(编号从左往右分别是 1 2 3)

思路

首先,你得输入这七个变量。

然后注意到数据范围是 a,b,c,d,e,f,x,y \leqslant 10^7,也就是说最大的情况答案是 2\times10^{14},这个数用 float 存就会炸,所以需要用 double。(但是浮点数应该也不会有人去用 float 吧)

想好之后直接算就可以了,这部分的代码:

cin>>a>>b>>c>>d>>e>>x>>y;
double lb1,lb2,lb3;
lb1=a*x+b*y;
lb2=c*y;
lb3=d*y+e;

然后就有人不会统计最大值,因为它并非一个数组,可能比较麻烦。我们这里注意到如果有多个最大值那么输出编号最小那个,所以我们可以把最大值求出来之后挨个比较。这样代码量比较小。

然后便是输出的问题,因为输出的权值需要保留两位小数。

对于保留两位小数我们可以用:

cout<<fixed<<setpricision(n)<</*......*/;

你可以把 n 替换为任意整数,这样在从我打的注释开始,后面的数都会保留两位小数。

因为它是把后面的数保留两位小数,所以我们输出的时候先把编号输出了再 setpricision 就可以了。

这部分的代码:

if(maxn==lb1){
    cout<<1<<' '<<fixed<<setprecision(2)<<maxn;
}else if(maxn==lb2){
    cout<<2<<' '<<fixed<<setprecision(2)<<maxn;
}else{
    cout<<3<<' '<<fixed<<setprecision(2)<<maxn;
}

这道题就讲完啦,希望可以帮到你!