五只猴子一起摘了一堆桃子,因为太累了,它们商量决定,先睡一觉再分。一会其中的一只猴子来了,它见别的猴子没来,便将这堆桃子平均分成5份 ,结果多了一个,就将多的这个吃了,并拿走其中的一份。一会儿,第2只猴子来了,他不知道已经有一个同伴来过,还以为自己是第一个到的呢,于是将地上的桃子堆起来,再一次平均分成5份,发现也多了一个,同样吃了这1个,并拿走其中一份。接着来的第3、第4、第5只猴子都是这样做的……根据上面的条件,问这5只猴子至少摘了多少个桃子?第5只猴子走后还剩下多少个桃子?
枚举法:找准枚举对象 提高枚举效率,枚举s0,与枚举s5 的效率是差距很大的。s0执行了3116次,而s5只执行了255次
#include <stdio.h> int main() { int s0,s1,s2,s3,s4,s5,n,i; for(s5=1;; s5++) { s4=5*s5+1; if(s4%4) continue; else s4/=4; s3=5*s4+1; if(s3%4) continue; else s3/=4; s2=5*s3+1; if(s2%4) continue; else s2/=4; s1=5*s2+1; if(s1%4) continue; else s1/=4; s0=s1*5+1; break; } printf("%d %d ",s0,s5*4); return 0; }