大米袋装
任务描述
地主家的庄稼丰收了,在他家的场院里有三堆小麦,长工想把这些小麦装袋运走,已知每个麻袋最多可装小麦x公斤,问这三堆小麦最少需要多少个麻袋。
输入格式:
输入仅一行,包括4个双精度浮点数,前三个数代表三堆小麦的重量,第4个数代表x,每个数的小数位数最多为2位。
输出格式:
输出也是一行,输出整数结果。
输入示例
c
100.00 200.0 306.61 101.10
输出示例
c
7
思路
本来想着用/和%来解决,若余数为0,则为num,若不为0,则加1。
c
# include<stdio.h>
int main()
{
double a,b,c,d;
int num,e;
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
num=(a+b+c)/d;
e=(int)(a+b+c)%(int)d;
if(e==0)
{
printf("%d",num);
}
else
printf("%d",num+1);
return 0;
}
但由于是浮点数,浮点数不能参与取余运算,因此转为int类型,但这是向下取整,故不可行。正确做法是调用ceil函数,正确代码如下。
c
# include<stdio.h>
# include<math.h>
int main()
{
double a,b,c,d;
int num;
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
num = ceil((a+b+c)/d); // 使用 ceil 函数向上取整
printf("%d", num);
return 0;
}
还有另一种正确做法,代码如下:
c
# include<stdio.h>
int main()
{
double a,b,c,d;
int num;
scanf("%lf %lf %lf %lf",&a,&b,&c,&d);
num = (a+b+c)/d;
if(a+b+c-num*d>0)
printf("%d",num+1);
else
printf("%d",num);
return 0;
}