有个王国在某年爆发了旱灾,于是那里的国王准备开仓济民。已知,第一天发一公斤粮食,第二天发两公斤粮食, 第三天发四公斤粮食。。。。。第二天发的粮食是前一天的两倍。我们已知安抚灾民一共需要m公斤粮食,问第几天国 王能够将宅民安抚好?
这道题有一个很坑的地方在于:一个发生了的现实问题,应该不用考虑0,但是国王不需要开仓济民,就直接输出0,会被遗忘。
下面的代码用等比公式计算第n天的粮食斤数,看懂computed( )函数即可;
//不要忽略0,国王需要0斤粮食,就输出0天
#include<stdio.h>
#include "math.h"
int computed(int);
int main(){
int m;
while(scanf("%d",&m)!=EOF){
computed(m);
}
}
int computed(int sum){
//1 2 4 8 16 32
int Sn=0;
int n=1;
if(sum==0){//
printf("0\n");
}
while(Sn<sum){//如果前n天的粮食不够灾民吃
Sn=1.0*(1-pow(2,n))/(1-2);//等比数列求和
if(Sn>=sum){//如果已经够了灾民吃
printf("%d\n",n);
break;
}else{//容易忘记让:循环变量自增1
n++;
}
}
}