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;
}