有个王国在某年爆发了旱灾,于是那里的国王准备开仓济民。已知,第一天发一公斤粮食,第二天发两公斤粮食, 第三天发四公斤粮食。。。。。第二天发的粮食是前一天的两倍。我们已知安抚灾民一共需要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 32int 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{//容易忘记让:循环变量自增1n++;}}
}