Мой код работает отлично для разных одиночного ввода, но не работает с вводом 0,04 для множественного ввода - PullRequest
0 голосов
/ 28 сентября 2019

Вход для вопроса: вход состоит из одного или нескольких контрольных примеров, за которыми следует строка, содержащая число 0,00, которое сигнализирует об окончании ввода.Каждый тестовый пример представляет собой одну строку, содержащую положительное число с плавающей запятой c, значение которого составляет не менее 0,01 и не более 5,20;c будет содержать ровно три цифры.

Вывод: для каждого тестового случая выведите минимальное количество карточек, необходимое для достижения вылета, по крайней мере, c длинами карточек.Используйте точный формат вывода, показанный в примерах.

Проблема: Как далеко вы можете сделать стопку карт над столом?Если у вас есть одна карта, вы можете создать максимальный свес половиной длины карты.(Мы предполагаем, что карты должны быть перпендикулярны столу.) С двумя картами вы можете сделать верхнюю карту нависающей над нижней на половину длины карты, а нижнюю - над таблицей на треть длины карты,для полного максимального свеса 1/2 + 1/3 = 5/6 длины карты.В общем случае вы можете сделать n выступов карт на 1/2 + 1/3 + 1/4 + ... + 1 / (n + 1) длины карт, где верхняя карта нависает над второй на 1/2, вторая нависаеттретья на 1/3, третья нависает над четвертой на 1/4 и т. д., а нижняя карта нависает над столом на 1 / (n + 1).

Ниже приведен мой код для другого отдельного ввода

#include<iostream>
using namespace std;

int main()
{
float desired{1.00},sum{0};
int denominator=2;
float num{1};
int total=0;
cin>>desired;
while(sum<=desired)
{
    num=1.00/denominator;
    sum+=num;
    total+=1;
    ++denominator;
}
cout<<total<<"\n";
return 0;
}

Верхний код работает для всех вводов, включая 0,04, но код, который я написал для множественного ввода, который написан ниже, неработает 0,04 Почему ??

    #include<iostream>
using namespace std;

int main()
    {
    float desired{1.00},sum{0};
    int denominator=2;
    float num{1};
    int total=0;
    while(1)
    {
        cin>>desired;
        if(desired!=0 and desired<=5.20 and desired>=0.01)
        {
            while(sum<=desired)
            {
                num=1.00/denominator;
                sum+=num;
                total+=1;
                ++denominator;
            }
            cout<<total<<"\n";
        }
        else
            exit(0);
        }
    return 0;
}
...