Мне трудно понять, почему чрезвычайно простая программа, которую я написал на 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, любые предложения о том, что может быть неправильным, будут действительно оценены.
Я полагаю, что эффективность выражается в процентах и, следовательно, имеет значение от 0 до 100 (а не от 0 до 1). При эффективности> 1% продукт i*efficiency
всегда будет больше, чем i
. Следовательно, алгоритм никогда не выходит из цикла.
Вы полностью игнорируете «округление до одного десятичного знака». Он не будет реализован.
На самом деле это интересная математическая задача. Вот ответ, но вам придется перевести его в код.
Вы увеличиваете эффективность после увеличения i. Это означает, что эффективность будет расти намного быстрее, чем i, поскольку при увеличении i на 1 эффективность увеличится (i + 1) раз, в конечном итоге намного больше, чем i.
Проверьте свою математику.
np <= n
упрощается доp <= 1
, когдаn
положительный (как вы говорите, это должно быть). Изменение значенияn
не имеет никакого эффекта.