获得所需的最少射门次数,以便射门得分为给定的百分比

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 &lt;= n 简化为p &lt;= 1。更改n 的值无效。 我认为效率以百分比表示,因此其值介于 0 和 100 之间(而不是介于 0 和 1 之间)。当效率>1% 时,乘积 i*efficiency 将始终大于 i。因此该算法永远不会退出循环。 您完全忽略了“四舍五入到小数点后一位”的事情。它不会自行实现。 这实际上是一个有趣的数学问题。 Here's the answer,但您必须将其翻译成代码。 【参考方案1】:

你在增加 i 之后乘以效率。这意味着效率将比 i 增长得快得多,因为当 i 增加 1 时,效率将增加 (i+1) 倍,最终比 i 大得多。

【讨论】:

以上是关于获得所需的最少射门次数,以便射门得分为给定的百分比的主要内容,如果未能解决你的问题,请参考以下文章

将给定数字转换为幸运数字所需的最小移动次数[关闭]

计算青蛙到达河对岸所需的最少跳跃次数

返回找到相邻的重复数字对所需的最少乘法次数

心上人足球小将射门广告二维码算法

算法第四章上机实验报告

编程:将二进制数转换为零所需的最少步骤