Сделайте минимальное количество бросков, необходимое для того, чтобы количество голов над бросками составляло заданный процент.

Мне трудно понять, почему чрезвычайно простая программа, которую я написал на C++, продолжает зацикливаться. Сначала я опишу проблему, чтобы проверить, может ли мое решение неправильное, а затем напишу код:

Эффективность стрельбы футболиста - это процент Забитые голы по всем броскам, сделанным за всю свою профессиональную карьеру. Это рациональное число от 0 до 100, с округлением до одного десятичного знака. Например, игрок, который совершил 7 бросков по воротам и забил 3 шайбы имеет стрельбу КПД 42,9. Учитывая эффективность стрельбы игрока, мы хотим знать, какие минимальное количество ударов по воротам, необходимое для достижения этого число (должно быть больше 0).

Я подумал, что если p - это заданный процент, то для того, чтобы получить минимальное количество бросков n, отношение np <= n должно выполняться, поскольку np будет количеством голов, забитых более чем на 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, любые предложения о том, что может быть неправильным, будут действительно оценены.

Проверьте свою математику. np <= n упрощается до p <= 1, когда n положительный (как вы говорите, это должно быть). Изменение значения n не имеет никакого эффекта.

Raymond Chen 10.08.2018 16:32

Я полагаю, что эффективность выражается в процентах и, следовательно, имеет значение от 0 до 100 (а не от 0 до 1). При эффективности> 1% продукт i*efficiency всегда будет больше, чем i. Следовательно, алгоритм никогда не выходит из цикла.

Robert Kock 10.08.2018 16:51

Вы полностью игнорируете «округление до одного десятичного знака». Он не будет реализован.

n. 1.8e9-where's-my-share m. 10.08.2018 17:19

На самом деле это интересная математическая задача. Вот ответ, но вам придется перевести его в код.

Raymond Chen 11.08.2018 05:00
2
4
90
1

Ответы 1

Вы увеличиваете эффективность после увеличения i. Это означает, что эффективность будет расти намного быстрее, чем i, поскольку при увеличении i на 1 эффективность увеличится (i + 1) раз, в конечном итоге намного больше, чем i.

Другие вопросы по теме