获得所需的最少射门次数,以便射门得分为给定的百分比
Posted
技术标签:
【中文标题】获得所需的最少射门次数,以便射门得分为给定的百分比【英文标题】:Get minimum number of shots required so that goals over shots is the percentage given 【发布时间】: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,但您必须将其翻译成代码。
【参考方案1】:
你在增加 i 之后乘以效率。这意味着效率将比 i 增长得快得多,因为当 i 增加 1 时,效率将增加 (i+1) 倍,最终比 i 大得多。
【讨论】:
以上是关于获得所需的最少射门次数,以便射门得分为给定的百分比的主要内容,如果未能解决你的问题,请参考以下文章