C语言,80分,4号测试点WA,求大佬带

P5709 【深基2.习6】Apples Prologue / 苹果和虫子

代码中的“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


|