2023软通杯校赛复盘
1.冰激凌误事
//by GAIN_HZ
//冰激凌误事(修
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n=0,i=1,flag=0;
double sum=0, k=0;
scanf ("%d %lf", &n,&k);
for ( ; i<=n; i++)
{
double x=0,y=0;
scanf ("%lf %lf", &x,&y);
sum+=x*y;//sum统计累计的乳糖值
if (sum >k*100 && flag == 0)//若超过并且是第一次的那根就flag记录
flag = i;
}
if (flag!=0)//若吃到倒下就输出第几根
printf("%d", flag);
else//若没倒就输出-1
printf("-1");
return 0;
}
需要注意的是,不能使用浮点型直接除判断,精度丢失问题,巧妙地去乘100就行,比赛的时候除了没过样例点。
2.卡片题
//by GAIN_HZ
#include<stdio.h>
#include<math.h>
#include<string.h>
int max(int x,int y,int z)
{
if(x>=y&&x>=z)
return x*10+y+z;
if(y>=x&&y>=z)
return y*10+x+z;
return z*10+x+y;
}
int main()
{
int a,b,c;
scanf("%d %d %d",&a,&b,&c);
printf("%d",max(a,b,c));
return 0;
}
基本思路是三张选出一个最大的数,记作maxx,则最后算式的最大值必定为maxx*10+第二个数+第三个数。
例如 5,2,6
则最大为6,将其乘10,剩下两个任何一个放在两位数的个位都可以,因为相加结果都一样,可以细细品
62+5=67 65+2=67;
因而在确定最高位为最大值时,剩下两个数怎么只要有一个放在个位,就能保证算式的最大值。