码迷,mamicode.com
首页 > 其他好文 > 详细

猴子分桃

时间:2014-09-14 17:57:47      阅读:285      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   java   ar   2014   div   问题   

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 != 0
21             //而且平分之后要余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表示猴子个数 

 

bubuko.com,布布扣

 

猴子分桃

标签:style   blog   http   color   java   ar   2014   div   问题   

原文地址:http://www.cnblogs.com/tech-bird/p/3971273.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!