【题目链接】
【题目考点】
1. 循环求幂
- 设变量r初始值为1:
int r = 1;
- 循环n次每次循环中输入变量a,将r的值设为r*a:
r *= a;
- 循环结束后,r即为 a n a^n an
【解题思路】
已知每年年薪
n
n
n万,房价每年上涨
k
/
100
k / 100
k/100
第一年存款
n
n
n万,房价
200
200
200万
第二年存款
2
n
2n
2n万,房价
200
(
1
+
k
/
100
)
200(1 + k / 100)
200(1+k/100)万
第三年存款
3
n
3n
3n万,房价
200
(
1
+
k
/
100
)
2
200(1 + k / 100)^2
200(1+k/100)2万
…
第x年存款
x
⋅
n
x\cdot n
x⋅n万,房价
200
(
1
+
k
/
100
)
x
−
1
200(1 + k / 100)^{x-1}
200(1+k/100)x−1万
判断这两个值,如果存款大于等于房价,说明买得起,输出年份。如果年数x大于20,那么即为买不起。
【题解代码】
解法1:
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, k;
cin>>n>>k;
double deposit = n, price = 200;//deposit:存款,price:房价
for(int i = 1; i <= 20; ++i)//i:现在是第几年
{
if(deposit >= price)//如果存款比房价高或相等
{
cout<<i<<endl;//输出此时的年数,
return 0;//程序结束
}
deposit += n;//存款增加n
price *= 1 + double(k) / 100;//房价增长
} cout<<"Impossible";//如果没在循环内return,那么一定是到20年还没买上房子,输出“不可能”
return 0;
}