代码中的“s/t”,整除完的结果是自动有向下取整性的,17/8=2,但实际上还吃了一点点的苹果,所以只需要用ceil函数向上取整就可以了
by Faith_NOI @ 2023-10-17 20:36:06
第14行n=m-(int)s/t;当有苹果被吃且没被吃完的时候,因为int遇到分数是向0取整,比如4号测试点2.125向0取整应该是2,但剩下0.875不是完整苹果,题目要求是完整苹果的数量,所以这种情况应该-1,正确的应该在这行后加这一句:if(s%t!=0)n--;这样就能在有余数的情况下取整了,经过测试,AC了
by liujingyi114514 @ 2023-10-17 20:48:28
@[Faith_NOI](/user/762813) @[liujingyi114514](/user/1135615)
谢谢大佬?
by su180 @ 2023-10-17 21:14:44
@[Faith_NOI](/user/762813)
```cpp
#include<stdio.h>
#include<math.h>
int main()
{
int m,t,s,n;
int x=(ceil)(s/t);
scanf("%d %d %d",&m,&t,&s);
if(t==0)
{
n=0;
printf("%d",n);
}
else if(m>s/t)
{
n=m-x;
printf("%d",n);
}else{
n=0;
printf("%d",n);
}
return 0;
}
```
大佬,为什么还是不行
by su180 @ 2023-10-19 09:49:43
#### int x=celi(s/t)
这个问题在于,我们优先计算的还是s/t,但是s/t完,它所得到的结果是不可能是有小数的,但是我们想要它有小数,才方便向上取整,所以对于s,t得定义成浮点数(double),这样子计算出来才是正确的,举个例子:
------------
当s,t为int时,令s=11,t=2,那么s/t=5,因为int相除,结果还是int,结果自然会自动抹掉小数
当s,t为double时,令s=11,t=2,那么s/t=5.5,此时ceil得x=6,能理解吧
------------
```cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,m;
double t,s;
scanf("%d %lf %lf",&m,&t,&s);
int x=ceil(s/t);
if (t==0){
n=0;
printf("%d",n);
}
else if (m>x)
{
n=m-x;
printf("%d",n);
}
else{
n=0;
printf("%d",n);
}
return 0;
}
```
by Faith_NOI @ 2023-10-19 19:11:22