一、题目链接
http://noi.openjudge.cn/ch0105/16/
二、解题思路
◎ 以步长1为基准,在1至20年内循环判断如下:
→ 如果总积蓄不低于房价,说明当年买得起房,记录当年年数,退出循环;
否则,说明当年买不起房,继续增加积蓄,房价继续上涨;
◎ 循环结束后:
→ 如果20年内买得起房,则输出买得起房的年数;
否则,20年内买不起房,输出Impossible。
三、实施步骤
◎ 首先,定义并输入两个int类型的整数N、K,分别代表年薪、房价的年增长率;
◎ 其次,定义int类型的整数ans,代表买得起房的年数,初始时ans为-1,代表买不起房;
◎ 然后,定义两个double类型的浮点数savings、price,分别代表总积蓄、房价,初始时savings=N,price=200;
◎ 第四,通过整数i标记年数编号,i从1开始,到20为止,步长为1,循环处理如下:
→ 如果savings>=price:
*** 令ans=i,break;
否则:
*** 令savings=savings+N,price=price+price*K/100;
上述循环结束后,ans中存储了买得起房的年数,或者买不起房的标记-1;
◎ 最后:
→ 如果ans!=-1:
*** 输出ans;
否则:
*** 输出Impossible。
四、Java程序
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int N = input.nextInt();
int K = input.nextInt();
int ans = -1;
double savings = N;
double price = 200;
for (int i = 1; i <= 20; i++) {
if (savings >= price) {
ans = i;
break;
}
else {
savings = savings + N;
price = price + price * K / 100;
}
}
if (ans != -1) {
System.out.print(ans);
}
else {
System.out.print("Impossible");
}
}
}
五、C++程序
#include <iostream>
using namespace std;
int main()
{
int N;
int K;
cin >> N;
cin >> K;
int ans = -1;
double savings = N;
double price = 200;
for (int i = 1; i <= 20; i++)
{
if (savings >= price)
{
ans = i;
break;
}
else
{
savings = savings + N;
price = price + price * K / 100;
}
}
if (ans != -1)
{
cout << ans;
}
else
{
cout << "Impossible";
}
return 0;
}