现在有两种金条,每种都有无限多个,一种是长宽高为1x1x2的金条,价值3元;另一种是长宽高为1x1x3的金条,价值5元。助教找到了一个装金条的箱子,箱子的长宽高为axbxc。
现在想叫你装价值最高的金条进去,如果你装对了,他会给你1.5分的期末成绩。
输入描述
输入共一行三个整数a,b,c [1,1000000],表示箱子的长宽高。
输出描述
输出一个数,表示箱子中金条的总价值的最大值。
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 2 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
#include<stdio.h>
#include<stdlib.h>
int main()
{
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
double volume=a*b*c,f1,f2,f3;
double find1,find2,find3;
char s1[30],s2[30],s3[30];
if(a>2||b>2||c>2)
{
f1=volume/3*5; //全为长金块
f2=(volume-1)/3*5+1; //含两短(换一长)
f3=(volume-2)/3*5+3; //含一短
while(1){ //检验f1,f2,f3谁为整数,输出为整数的那一个到f1
sprintf( s1, "%.0lf", f1);
sscanf( s1, "%lf", &find1);
if(f1==find1) break;
sprintf( s2, "%.0lf", f2);
sscanf( s2, "%lf", &find2);
if(f2==find2) {f1=f2; break;}
sprintf( s3, "%.0lf", f3);
sscanf( s3, "%lf", &find3);
if(f3==find3) {f1=f3; break;}
}
}
else
{
f1=((int)volume)/2*3.0; //只能装短金块
}
//printf("%.0f\n",f1);
int q=(int)a%3,w=(int)b%3,e=(int)c%3;
if ((q==2)&&(w==2)&&(e==2)&&(a+b+c>6)&&((a-2)*(b-2)*(c-2)>=0)&&((a==2&&b==2&&c!=2&&c>4)||(b==2&&a!=2&&c==2&&a>4)||(c==2&&b!=2&&a==2&&b>4)) ) f1=(volume-8)/3*5.0+12.0; //不是螺旋排列
char *str;
int digits=0,dec,sign;
if(f1==0) printf("0\n");
else
{
str = (char*)fcvt(f1, digits, &dec, &sign);
printf("%s\n",str);
}
}
//样例37 2,5,5 83 一个2,短金条中间竖着放,螺旋排列
//样例39 2,2,5 32