循环控制~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类型的变量