【发布时间】:2019-01-18 04:22:50
【问题描述】:
我很难理解为什么我用 C++ 编写的一个极其简单的程序会一直循环。我将首先描述手头的问题,以检查我的解决方案是否不正确,然后我将编写代码:
足球运动员的射门效率是 进球数超过了他所有职业生涯中的所有射门次数。它是一个介于 0 到 100 之间的有理数, 四舍五入到小数点后一位。例如,一名球员 7次射门打进3球有射门 效率为 42.9。 考虑到球员的投篮效率,我们想知道哪个 是达到目标所需的最小射门次数 数字(必须大于 0)。
我的想法是,如果 p 是给定的百分比,那么为了获得最小的射击次数 n,必须满足关系 np p 将是总进球数超过 n。
我编写了以下程序:
int main(){
float efficiency;
cin >> efficiency;
int i = 1;
float tries = i*efficiency;
while(tries > i){
i++;
tries = i*efficiency;
}
cout << i << endl;
return 0;
}
这个程序永远不会终止,因为它一直在 while 内循环,任何关于可能出错的建议都将非常感激。
【问题讨论】:
-
检查你的数学。当
n为正时(你说它必须是),np <= n简化为p <= 1。更改n的值无效。 -
我认为效率以百分比表示,因此其值介于 0 和 100 之间(而不是介于 0 和 1 之间)。当效率>1% 时,乘积
i*efficiency将始终大于i。因此该算法永远不会退出循环。 -
您完全忽略了“四舍五入到小数点后一位”的事情。它不会自行实现。
-
这实际上是一个有趣的数学问题。 Here's the answer,但您必须将其翻译成代码。
标签: c++ loops c++11 while-loop