演算法訓練 - 調和數列問題 輸入一個實數x,求最小的n使得,1/2+1/3+1/4+...+1/(n+1)>=x。   輸入的實數x保證大於等於0.01,小於等於5.20,並且恰好有兩位小數。你的

伏城無嗔發表於2020-10-06

問題描述

輸入一個實數x,求最小的n使得,1/2+1/3+1/4+…+1/(n+1)>=x。

輸入的實數x保證大於等於0.01,小於等於5.20,並且恰好有兩位小數。你的程式要能夠處理多組資料,即不停地讀入x,如果x不等於0.00,則計算答案,否則退出程式。

輸出格式為對於一個x,輸出一行n card(s)。其中n表示要計算的答案。
輸入格式
  分行輸入x的具體數值
輸出格式
  分行輸出n的數值,格式為n card(s)
例子

樣例輸入
1.003.710.045.190.00
樣例輸出
3 card(s)61 card(s)1 card(s)273 card(s)
提示

請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入…” 的多餘內容。

所有程式碼放在同一個原始檔中,除錯通過後,拷貝提交該原始碼。

注意: main函式需要返回0
注意: 只使用ANSI C/ANSI C++ 標準,不要呼叫依賴於編譯環境或作業系統的特殊函式。
注意: 所有依賴的函式必須明確地在原始檔中 #include , 不能通過工程設定而省略常用標頭檔案。
提交時,注意選擇所期望的編譯器型別。

思路

這裡面就是注意一下輸入的方式就行了,其他的判斷都是十分基礎的。

程式碼:

#include<stdio.h>

int main(void)
{
    int i;
    double n,k,s;
    scanf("%lf",&n);
    while(n!=0.00)
    {
        s=0.00;
        for(i=2;1;i++)
        {
            k=1.0/i;
            s+=k;
            if(s>=n)
            {
                printf("%d card(s)\n",i-1);
                break;
            }
        }
        scanf("%lf",&n);
    }
    return 0;
}

相關文章