首页 > 代码库 > 猴子分桃

猴子分桃

m只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的m堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有m-1堆桃。于是合在一起,分成相等的m堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;.....其他几只猴子也都是 这样分的。问:这堆桃至少有多少个?

直接上代码:

 1 import java.util.Scanner; 2 public class huawei_taozi { 3     /** 4      * 猴子分桃问题 5      */ 6     public static void main(String[] args) { 7         Scanner scanner = new Scanner(System.in); 8         System.out.println("输入猴子个数:"); 9         10         int num = scanner.nextInt();11         12         int monkey=1;  //要分桃的猴子数  13         int peaches=1; //桃的总数  14         int peach=1;   //每次分桃的总数  15         16         //循环进行给每个猴子分桃  17         while(monkey<=num)  18         {  19             //如果成功分桃  20             //分桃的标准是每一堆不为0    peach/num != 021             //而且平分之后要余1          peach%num==1    22             if(peach%num==1 && peach/num != 0)  23             {  24                 //当一堆分完之后,每一堆的桃子个数为peach/num(余数为1,忽略不计)25                 //所以下次分时,桃子总个数是(peach/num)*(num-1)26                 peach=(peach/num)*(num-1);  27                 28                 //换下一个猴子  29                 monkey++;  30                 31             }  32             //如果失败,重新分桃这时可分桃数量加1  33             else  34             {  35                 peaches++;  36                 peach=peaches;  37                 monkey=1;  38             }  39         }  40         System.out.println("桃的最小总数为:"+peaches);  41     }42 }

 

m超过10好像就是大数问题了。

 

这个题可以总结出一个公式出来。

m^m - (m-1)

m表示猴子个数 

 

 

猴子分桃