猴子分桃子问题求解

来源:互联网 发布:李小龙死亡游戏知乎 编辑:程序博客网 时间:2024/04/28 10:46

 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中,拿走了一份,第三、第四、第五只猴子都是这样做的,问海滩上原来最少有多少个桃子?

方法一:

#include <stdio.h>

void main()

{

int i;//每次猴子拿走的桃子数量

int j;//猴子的数量

int left;//每次猴子还没有分之前的桃子数量

int m;

for(i=0;i<1000;i++)

{

m = i;//5个猴子拿走桃子的数量

for(j=5;j>1;j--)//注意第5个猴子的情况不需要计算,每次判断的都是上一个猴子的情况,最后一个猴子剩余为4m本身就是i4

{

left = 5*i+1;//上一个猴子分之后剩下的桃子数

i = left/4;//上一个猴子拿走的桃子为下一个猴子未分之前桃子的四分之一

if(left%4!=0)

{

break;

}

}

if(j==1)

{

printf("最后剩下个数为%d",4*m);

printf("桃子总数最少为%d\n",(left/4)*5+1);

}

i=m;//中间储值变量,以防止i的值被改变

}

}

方法二:

#include<stdio.h>

int main()

{

  int i,j;

  int temp;

  for(j=6;j<10000;j++){

  temp=j;

  for(i=0;i<5;i++){

  if((temp%5)==1){

  temp=(temp-1)/5*4;

      continue;

  }

  else{

               // printf("The smallest number isnot %d\n", j);

       break;

  }

  }

          if(i==5){

  printf("The smallest number is %d\n", j);

  return;

  }

  }

}