题意
蒜头君从现在开始工作,年薪 N 万。他希望在蒜厂附近买一套
60平米的房子,现在价格是200 万。假设房子价格以每年百分之 K 增长,并且蒜头君未来年薪不变,且不吃不喝,不用交税,每年所得N 万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N 万,房价200 万)
Input
一行,包含两个正整数 N(10≤N≤50),K(1≤K≤20),中间用单个空格隔开。
Output
如果在第20 年或者之前就能买下这套房子,则输出一个整数 M,表示最早需要在第M 年能买下;否则输出"Impossible"。
输出时每行末尾的多余空格,不影响答案正确性
输入样例
50 10
输出样例
8
提示
分析
简单的比较题
- 题目分析
对第i年的存款和房价进行比较,如果存款大于等于房价,就说明当年可以买下房子。进行20次比较,分别代表20年。若出现第21次比较,则这证明无法完成。
第i年存款 = i * N
第i年房价 = 200*(1+k/100)^(i-1)
- 问题
注意几个数据的类型:
- 房价和比例要用浮点数,此处用double防止超出表示范围。
- 底薪用整型
注意在累加存款的时候,不能直接用前一年的存款叠加,因为每一年增加的存款数实际是工资数,不是前一年的总存款数翻倍。
总结
- 数据类型烦死人👋
代码
//
// main.cpp
// lab1
//
//
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
double price = 200,k = 0; //数据类型不能错
int n = 0,sla = 0;
cin>>n>>k;
sla = n; //底薪
k /= 100;
k += 1.0; //得到房价翻倍比例
// cout<<k<<" k "<<endl;
for( int i = 1 ; i <= 21 ; i++ ) //枚举到第21年
{
// cout<<sla<<" salary "<<price<<" price "<<i<<" year "<<endl;
if( sla >= price && i < 21 ) //只有1到20年才能进行有效判断
{
cout<<i<<endl; //若第i年的房价小于等于薪水,则输出年份
return 0;
}
sla += n; //得到下一年的薪水和房价
price *= k;
}
cout<<"Impossible"<<endl; //第20年以后不考虑
return 0;
}