渔夫分鱼算法
A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。第二天清晨A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的 一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?- 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;
- }
- }
- }
- }
- }
- }
- }
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
谁能算出正确的算法
正确的一个算法如下
- public class MyTest extends Thread {
- public static void main(String[] arge) {
- int i = 0;
- do {
- i++;
- if (f(5, i * 5 + 1)) {
- System.out.println(i * 5 + 1);
- System.exit(0);
- }
- } while (true);
- }
- public static boolean f(int a, int b) {
- if ((b - 1) % 5 == 0) {
- if (a == 1)
- return true;
- else
- return f(a - 1, (b - 1) / 5 * 4);
- }
- return false;
- }
- }
结果为 3121
算法2
- public static void main(String[] arge) {
- int i, j, num;
- for (i = 1;; i++) {
- num = i;
- for (j = 0; j < 4; j++) {
- if ((num * 5 + 1) * 5 % 4 != 0)
- break;
- else
- num = (num * 5 + 1) / 4;
- }
- if (j == 4) {
- System.out.println("num*5+1 :" + (num * 5 + 1));
- System.out.println("i :" + i);
- break;
- }
- }
- }