循环控制~16买房子

题目描述:

输入:

一行,包含两个正整数N(10 <= N <= 50), K(1 <= K <= 20),中间用单个空格隔开。

输出:

如果在第20年或者之前就能买下这套房子,则输出一个整数M,表示最早需要在第M年能买下,否则输出Impossible。

 1 #include<stdio.h>
 2 int main(){
 3     int N,K;            //N:年薪,K:每年房价以百分之K增长
 4     scanf("%d %d",&N,&K);
 5     int M=1;            //第几年能买下这套房子
 6     double tem=200;     //每一年暂时的房价,需高精度
 7     double s=N;           //每一年积攒的年薪
 8 
 9     //判断条件放在(N<tem)精确度高且所需年份很久的话容易时间超限
10     
11     // while(N<tem){
12         
13     //     tem=tem+tem*K*0.01;
14     //     N+=50;
15     //     M++;
16     //     // printf("%lf ",tem);
17     //      printf("%d\n",N);
18        
19     // }
20     // if(M<=20)
21     //     printf("%d",M);
22     // if(M>20)
23     //     printf("Impossible");
24 
25     //判断条件放在年份是否大于20
26     while(M<=20){
27         if(N>=tem)
28             break;
29         tem=tem+tem*K*0.01;
30         s=s+N;
31        // N+=50;
32         M++;
33     }
34     if(M<=20)
35         printf("%d",M);
36     else
37         printf("Impossible");
38     
39 }

solution:

1 判断循环控制退出的条件:

  放在工资>=房价时退出:当时间过长时容易时间超限

  应放在:年份是否超出20年,再在循环中放一个判断条件:工资>=房价时退出循环

2 每一年积攒的年薪应该用另一个double类型的变量来存放,不可直接用int型,否则会得到错误的编译结果

3 计算利率应使用高精度double类型的变量

posted on 2022-10-13 14:39  罗小罗佳油  阅读(83)  评论(0编辑  收藏  举报