渔夫分鱼算法

来源:互联网 发布:网络催眠音频 编辑:程序博客网 时间:2024/04/28 11:34

A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。第二天清晨A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?

 

  1.     /**
  2.      * 渔夫分鱼
  3.      * 
  4.      * @param n
  5.      *            人数
  6.      * @return
  7.      *             原始总鱼数
  8.      */
  9.     static int devideFish(int n) {
  10.         for (int i = 0; i < Integer.MAX_VALUE; i++) {
  11.             int sum = i;
  12.             for (int j = 0; j < n; j++) {
  13.                 if (sum % n == 1)
  14.                     sum = (sum / n) * 4;
  15.                 else
  16.                     sum = 0;
  17.             }
  18.             if (sum != 0)
  19.                 return i;
  20.         }
  21.         return -1;
  22.     }

引用CSDN网友de思想:

n   mod   5=1
第一个拿走自己的一堆后同样除5余1,
即4k   mod   5=1,
所以   k   mod   5   =4
同理,第二个、第三个……都是4堆余1,自然一堆余4
这正是“除基数取余”的方法,所以答案就是5进制的   44441
(44441)5=3121D

原创粉丝点击