我给北大法官ID 1003的这个解决方案有什么问题

What is wrong with this solution of mine for the PKU Judge ID 1003?

本文关键字:解决方案 什么 问题 大法官 ID 1003      更新时间:2023-10-16

这是PKU法官的问题ID 1003的链接:http://poj.org/problem?id=1003

对于这个问题,我们所需要做的就是计算谐波级数的和,并将其与我们已经输入的变量进行比较

我得到了样本输入案例的正确答案,但我不知道为什么我的答案没有被接受?结果我得到了"错误答案"。这是问题中的一部分,上面写着"输入由一个或多个测试用例组成,后面跟着一行包含数字0.00,表示输入结束"。我不知道如何做0.00部分,我只是接受单个输入,我不明白如何做?

这是我的解决方案:

#include<iostream>
using namespace std;
int main()
{
    float c;
    float sum = 0;
    cin >> c;
    short int i = 1;
    while(1)
    {
        sum += (float)1/(i+1);
        if(sum >= c)
        {
            cout << i << " card(s)";
            break;
        }
        i++;
    }
    return 0;
}

输入由一个或多个测试用例组成,后面跟着一行包含数字0.00,表示输入结束。每个测试用例都是一行,包含一个正浮点数c,其值至少为0.01,最多为5.20;c将恰好包含三位数字。

您的程序无法接受正确的输入。

  1. 输入由一个或多个测试用例组成

  2. 使用示例中所示的精确输出格式,这意味着您应该在每个案例之后打印一个换行符。

我对您的代码做了一些小的更改以使其被接受。

#include <iostream>
using namespace std;
int main() {
    float c;
    while (true) {
        cin >> c;
        if (c == 0.0)
            return 0;
        float sum = 0;
        short int i = 1;
        while (1) {
            sum += 1.0 / (i + 1);
            if (sum >= c) {
                cout << i << " card(s)" << endl;
                break;
            }
            i++;
        }
    }
}