OpenJudge 計算概論(A) / B04 基礎練習題(4)3:買房子

3:買房子
總時間限制:1000ms內存限制:65536kB
描述
某程序員開始工作,年薪N萬,他希望在中關村公館買一套60平米的房子,現在價格是200萬,假設房子價格以每年百分之K增長,並且該程序員未來年薪不變,且不吃不喝,不用交稅,每年所得N萬全都積攢起來,問第幾年能夠買下這套房子?(第一年年薪N萬,房價200萬)
輸入
一行,包含兩個正整數N(10 <= N <= 50), K(1 <= K <= 20),中間用單個空格隔開。
輸出
如果在第20年或者之前就能買下這套房子,則輸出一個整數M,表示最早需要在第M年能買下,否則輸出Impossible。
樣例輸入

50 10

樣例輸出

8

這道題就是個數學題,結果wrong answer了好多次,以至於我又開始懷疑自己是不是數學差到破天荒了。看了一下別人寫的代碼。然後各種試錯,發現輸入的數據需要是浮點型的。題目中也沒說明白,簡直!!!

自己寫的代碼真的像小學生算數,一步一步往前走。。。,別人的和自己的區別就在算下一年房價那裏。如果按照我自己的那種計算方式,根本不需要double型啊,但是就一直wrong answer,如果哪位大神能解釋爲啥,請評論,小的感激不盡!

代碼

//自己的:

#include<iostream>
using namespace std;
int main()
{
    double salary,K,price=200; ;   // 年薪,房價每年的增長率
    while(cin>>salary>>K)
    {
    int i=1; //這裏是從第二年開始就不行,必須得有下面的i>1的判斷
    for(; i<=20; i++)
    {
        if(i>1)
            price+=price*K/100;//每年價格的增長是在上一年的基礎上,對於0.0幾這種百分比的數,可以先計算出來,再除以100
        if(salary*i>=price)
        {
            cout<<i<<endl;
            break;
        }
    }
    if(i>20)
        cout<<"Impossible"<<endl;
    }
    return 0;
}

//看了別人的:
#include<iostream>
using namespace std;
int main()
{
    double salary,K,price=200;   // 年薪,房價每年的增長率
    cin>>salary>>K;  //只輸入一組數據,不是輸入多組數據也可以
//    while(cin>>salary>>K)
//    {
    int i;
    for(i=1; i<=20; i++)
    {
        if(i>1)
            price*=1+K/100.0;
        if(salary*i>=price)
        {
            cout<<i<<endl;
            break;
        }
    }
    if(i>20)
        cout<<"Impossible"<<endl;
//    }
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章