新手求教:关于虫子吃苹果问题

苹果和虫子

【题目描述】
你买了一箱n个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y小时你还有多少个完整的苹果?

【输入】
输入仅一行,包括n,x和y(均为整数)。

【输出】
输出也仅一行,剩下的苹果个数。

【输入样例】
10 4 9
【输出样例】
7

可以通过ceil函数实现苹果的“完整”问题吗?程序运行时答案错误,求教

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{int n,x,y;
cin>>n>>x>>y;
if(y<=n*x) 
cout<<n-ceil(y/x)<<endl;
else
cout<<0<<endl;
return 0;
}
#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int main()
{int n,x,y;
cin>>n>>x>>y;
if(y<=n*x) 
cout<<n-ceil(y/(float)x)<<endl;
else
cout<<0<<endl;
return 0;
}

这个程序存在精度误差风险,比如说算出来y/x=1.0000001,那么按理说应该返回1,而ceil可能会返回2
修改如下:

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;

int myceil(float x)
{
    if ((ceil(x)) != (ceil(x - 0.0001)))
        return ceil(x) - 1; //避免1.000001 -> 2
    else
        return ceil(x);
}

int main()
{int n,x,y;
cin>>n>>x>>y;
if(y<=n*x) 
cout<<n-myceil(y/(float)x)<<endl;
else
cout<<0<<endl;
return 0;
}