A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑伟 初级黑马   /  2012-12-23 13:57  /  1976 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. /*
  2. 海滩上有一堆桃子,五只猴子平分,第一只猴子把这堆桃子平均分了五份多了一个,
  3. 这只猴子把多的一个扔到海里,拿走了一份,第二只猴子把剩下的平均分成五份又多了一个,
  4. 他同样把多的一个扔进海里,拿走了一份,第三、四、五只猴子都这样做,
  5. 问海滩上原来最少有多少个桃子?
  6. */

  7. public class Monkey {

  8.         public static void MPeach() {
  9.                 int i = 4; // 假设的最后桃子个数(5个猴子都分完之后所剩的桃子),最后桃子个数一定是4个倍数(因为要分成5等份,而最后一只猴子拿走了一份)
  10.                 int k = 0; // 分桃上次所剩桃子的个数
  11.                 int count; // 分桃次数
  12.                 int j;
  13.                 int m;

  14.                 while (i < 10000)// 最少桃子数的范围
  15.                 {
  16.                         count = 1;
  17.                         m = i; // 倒着分完第count次后的桃子数
  18.                         j = 0;
  19.                         while (j < 5 ) {
  20.                                 k = i / 4 * 5 + 1;
  21.                                 i = k;
  22.                                 if (k % 4 == 0) { // 第count次分完后所剩的桃子书还是4的倍数
  23.                                         count++;
  24.                                 } else {
  25.                                         break;
  26.                                 }
  27.                                 j++;
  28.                         }
  29.                         i = m;
  30.                         if (count == 5) {
  31.                                 break;
  32.                         }
  33.                         i += 4;
  34.                 }
  35.                 System.out.println(k);
  36.         }
  37.        
  38.         public static void Mpeach02(){
  39.                 int sum2; // 用来完成桃数运算的变量
  40.                 int sum1 = 6; // 实际的桃子总数
  41.                 int count ;
  42.                 int index ;
  43.                 boolean flag = true; // 控制外层循环

  44.                 while (flag) {
  45.                         index = 0; // 初始化分桃子的次数为0
  46.                         count = 0; // 初始化为第一个猴子开始分桃子
  47.                         sum2 = sum1; // 初始化逻辑运算的桃子总数为实际的桃子总数,因为此变量用于计算,所以值会改变,为了不影响实际的桃子总数,所以用此变量代替!
  48.                         while (count < 5) {
  49.                                 if (sum2 % 5 == 1) { // 如果桃子总数除以5余1说明此桃子总数符合分桃方案
  50.                                         sum2 -= 1; // 因为桃子被猴子扔掉一个,所以要减1
  51.                                         sum2 = sum2 - sum2 / 5; // 又因为桃子被平均分为了5份并且被猴子拿走了1份,所以要减1/5
  52.                                         index++; // 如果符合分桃方案就将计数器加1
  53.                                 }
  54.                                 // 如果计数器等于5,也就是桃子的总数在符合分桃方案(sum2%5 == 1)的前提下分可5次的话!说明此桃子总数是符合条件的最小整数!
  55.                                 if (index == 5) {
  56.                                         System.out.println("最少有 " + sum1 + " 个桃子!");
  57.                                         flag = false;// 循环结束
  58.                                 }
  59.                                 count++;
  60.                         }
  61.                         sum1 += 5; // 桃子的总数只有每次递增5才可以符合分桃方案(sum2%5 == 1)!
  62.                 }
  63.         }

  64.         public static void main(String[] args) {
  65.                 MPeach();
  66.                 Mpeach02();
  67.         }

  68. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
邵新瑜 + 1 很给力!

查看全部评分

1 个回复

倒序浏览
值得学习ing!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马