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

Мне трудно понять, почему чрезвычайно простая программа, которую я написал на 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
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
4
90
1

Ответы 1

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

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