Zoe_yuyang
2018-12-13 08:12
采纳率: 50%
浏览 5.2k

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

苹果和虫子

【题目描述】
你买了一箱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;
}
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • threenewbee 2018-12-13 09:19
    #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;
    }
    
    评论
    解决 2 无用
    打赏 举报

相关推荐 更多相似问题