渔夫分鱼算法

 

渔夫分鱼算法

A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。第二天清晨A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的 一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?
  1. int count = 0;  
  2. int x = 0;  
  3. for (int i = 0; i > -1; i++) {  
  4.   x = i;  
  5.   if ((x - 1) % 5 == 0) {  
  6.     x = (x - 1) * 4 / 5;  
  7.     if ((x - 1) % 5 == 0) {  
  8.       x = (x - 1) * 4 / 5;  
  9.       if ((x - 1) % 5 == 0) {  
  10.         x = (x - 1) * 4 / 5;  
  11.         if ((x - 1) % 5 == 0) {  
  12.           x = (x - 1) * 4 / 5;  
  13.           if ((x - 1) % 5 == 0) {  
  14.             count++;  
  15.             System.out.println(x);  
  16.             if (count == 3) {  
  17.               break;  
  18.             }  
  19.           }  
  20.         }  
  21.       }  
  22.     }  
  23.   }  
  24. }  
    int count = 0;
    int x = 0;
    for (int i = 0; i > -1; i++) {
      x = i;
      if ((x - 1) % 5 == 0) {
        x = (x - 1) * 4 / 5;
        if ((x - 1) % 5 == 0) {
          x = (x - 1) * 4 / 5;
          if ((x - 1) % 5 == 0) {
            x = (x - 1) * 4 / 5;
            if ((x - 1) % 5 == 0) {
              x = (x - 1) * 4 / 5;
              if ((x - 1) % 5 == 0) {
                count++;
                System.out.println(x);
                if (count == 3) {
                  break;
                }
              }
            }
          }
        }
      }
    }
这样能得出好多个结果,可把结果代回去算却是错误的
比如第一个答案结果是1276
1276-1=1275/5=255*4=1020-1=1019/5=203.8

谁能算出正确的算法

正确的一个算法如下

  1. public class MyTest extends Thread {  
  2.   public static void main(String[] arge) {  
  3.     int i = 0;  
  4.     do {  
  5.       i++;  
  6.       if (f(5, i * 5 + 1)) {  
  7.         System.out.println(i * 5 + 1);  
  8.         System.exit(0);  
  9.       }  
  10.     } while (true);  
  11.   }  
  12.   
  13.   public static boolean f(int a, int b) {  
  14.     if ((b - 1) % 5 == 0) {  
  15.       if (a == 1)  
  16.         return true;  
  17.       else  
  18.         return f(a - 1, (b - 1) / 5 * 4);  
  19.     }  
  20.     return false;  
  21.   }  
  22. }  


结果为 3121


算法2

  1. public static void main(String[] arge) {  
  2.   int i, j, num;  
  3.   for (i = 1;; i++) {  
  4.     num = i;  
  5.     for (j = 0; j < 4; j++) {  
  6.       if ((num * 5 + 1) * 5 % 4 != 0)  
  7.         break;  
  8.       else  
  9.         num = (num * 5 + 1) / 4;  
  10.     }  
  11.     if (j == 4) {  
  12.       System.out.println("num*5+1  :" + (num * 5 + 1));  
  13.       System.out.println("i   :" + i);  
  14.       break;  
  15.     }  
  16.   }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值