首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

渔夫分鱼算法的实现,该如何解决

2012-01-05 
渔夫分鱼算法的实现A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。第二天清晨A先醒来,

渔夫分鱼算法的实现
A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。
第二天清晨

A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,
B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,
C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?

请给出代码。。。。

[解决办法]

Java code
public class Csdn {    public static void main(String[] args){        for (int i = 0;; i++) {            int sum = i;            for (int j = 0; j < 5; j++) {                if (sum % 5 == 1)                    sum = (sum / 5)*4;                else                    sum = 0;            }            if (sum != 0) {                System.out.println(i);                break;            }        }    }}
[解决办法]
Java code
public class test {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;}}
[解决办法]
这个好像是猴子分桃吧,怎么成渔夫了
[解决办法]
C/C++ code
main(){int n,i,x,flag=1;for(n=6;flag;n++){for(x=n,i=1;flag&&i<=5;i++)if((x-1)%5==0)x=4*(x-1)/5;else flag=0;if(flag)break;else flag=1;}printf("Total fish=%d\n",n);}
[解决办法]
探讨
Java codepublic class Csdn {

public static void main(String[] args){
for (int i = 0;; i++) {
int sum = i;
for (int j = 0; j < 5; j++) {
if (sum % 5 == 1)
sum = (sum / 5)*4;
else
sum = 0;
}
if (sum != 0) {
System.out.println(i);


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


---------------
(44441)5 / (10)5=(4444)5 余1(5)
(4444/4堆)5 mod (10)5=(1111)5mod(10)5=4

[解决办法]
呵呵。来学习
[解决办法]
public class test {
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;
}
}

这个递归是正确的
[解决办法]
呵呵,偶也进来学习了一下啊。
[解决办法]
((((1*5+1)*5+1)*5+1)*5+1)*5+1 = 5^5+5^4+5^3+%^2+5^1+1 = (5^6-1)/(5-1) = (5^3+1)*(5^3-1)/(5-1)=126*124/4=126*31=3780+126=3906
[解决办法]
代码:
Java code
public class Fy {    /**     * 求解渔夫分鱼问题(穷举法)。     * @param num 渔夫数。     * @param mod 每次丢掉鱼数。     * @return 这些渔夫至少捕到多少条鱼能使条件成立。     */    public static int fy(final int num, final int mod) {        if (num < 1 || mod < 1) return -1;        int min = num + mod;        while (min < Integer.MAX_VALUE) {            int m = min;            int i = num;            do {                if (m % num != mod) break;                m -= mod;                m -= m / num;            } while (--i > 0);            if (i == 0) return min;            ++min;        }        return -1;    }    public static void main(String[] args) {        System.out.println(fy(5, 1));    }} 


[解决办法]

探讨
这个好像是猴子分桃吧,怎么成渔夫了

[解决办法]
答案到底是多少呢?

3121 还是 3906 ?? 呵呵!
(3121-1)/5 = 624
(624-1)/5 = ??? 分不开了???


(3906-1)/5 = 781
(781-1)/5 = 156
...

至少到这里是正确的
[解决办法]
public class Fy {

/**
* 求解渔夫分鱼问题(穷举法)。
* @param num 渔夫数。
* @param mod 每次丢掉鱼数。
* @return 这些渔夫至少捕到多少条鱼能使条件成立。
*/
public static int fy(final int num, final int mod) {
if (num < 1 || mod < 1) return -1;
int min = num + mod;
while (min < Integer.MAX_VALUE) {
int m = min;
int i = num;
do {
if (m % num != mod) break;
m -= mod;
m -= m / num;
} while (--i > 0);
if (i == 0) return min;
++min;
}
return -1;
}

public static void main(String[] args) {
System.out.println(fy(5, 1));
}

}
[解决办法]
import java.io.*;

public class Fenyu {

public static int FishNum(int n,int i,int j){
//FishNum(人数,每份鱼数,扔掉的),返回参与分配的鱼总数
return n*i+j;
}

public static void main(String args[]){
int a[]=new int [5];
a[4]=1;
for (int i=3;i>=0;i--){
a[i]=FishNum(5,a[i+1],1);
}
int sum=FishNum(5,a[0],1);
System.out.println("鱼总数为:"+sum);
}
}

鱼总数为:3906;
[解决办法]
探讨
代码:

Java codepublic class Fy {

/**
* 求解渔夫分鱼问题(穷举法)。
* @param num 渔夫数。
* @param mod 每次丢掉鱼数。
* @return 这些渔夫至少捕到多少条鱼能使条件成立。
*/
public static int fy(final int num, final int mod) {
if (num < 1 || mod < 1) return -1;
int min = num + mod;
while (min < Integer.MAX_VALUE) {


[解决办法]
学习学习。算法很重要
[解决办法]
探讨
引用:
代码:

Java codepublic class Fy {

/**
* 求解渔夫分鱼问题(穷举法)。
* @param num 渔夫数。
* @param mod 每次丢掉鱼数。
* @return 这些渔夫至少捕到多少条鱼能使条件成立。
*/
public static int fy(final int num, final int mod) {
if (num < 1 ¦ ¦ mod < 1) return -1;
int min = num + mod;
while (min < Integer.MAX_VALUE) {



别看了,完全错了!!!耻辱!!!

[解决办法]
答案3121验证过程:

Java code
总鱼数  扔掉一条  平分5份后其中一份的鱼数lic public void feed();    public void enjoy();}class Student implements CarePet {    String name;        Student(String name) {        this.name =  name;    }        public void feed() {        System.out.println("学生喂养宠物");    }        public void enjoy() {        System.out.println("宠物很enjoy~~");    }}class Farmer extends Student implements CarePet {    Farmer(String n) {        super(n);    }        public void feed() {        System.out.println("农民喂养宠物");    }        public void enjoy() {        System.out.println("宠物同时也是食物");    }}public class Tinterface {    public static void main(String args[]) {        CarePet c1 = new Student("seven");        System.out.println("一个叫" + c1.name + "的");        c1.feed();        c1.enjoy();        System.out.println("==========================================================================");        CarePet c2 = new Farmer("jack");        System.out.println("一个叫" + c2.name + "的");        c2.feed();        c2.enjoy();    }} 


[解决办法]
3楼 lord_is_layuping 的算法也正确,速度比我的要快些。
[解决办法]
学习.......ing
[解决办法]
应该是3906条鱼,因为问题问的是至少捕到多少鱼,所以最后一个渔夫分鱼时,应该是6条鱼


public class CentFish{
private static long count_peach(int n) //n为5个渔夫
{
if(n == 1)
{
return 6;
}
else
{
return count_peach(n - 1) * 5 + 1;
}
}
public static void main(String[] args) {
System.out.print(count_peach(5));
}
}
[解决办法]
学习学习
[解决办法]
应该是3906条,,
用递归。。。
[code=Java][/code]class Demo{
public static void main(String[] args){
long x=f(5);
System.out.println("有"+x+"条鱼");

}
static long f(int i){

if(i==1){

return 6;
}
else
return f(i-1)*5+1;
}
}

[解决办法]
答案3906验证过程:

Java code
总鱼数  扔掉一条  平分5份后其中一份的鱼数3906   3905     7813124   3123     624.6 ???
[解决办法]
恩,是错了,呼呼呼!
[解决办法]
搅局成功。 大家仔细看看题目。呵呵!
[解决办法]

[解决办法]
/**
 * @(#)Fenyu.java
 *
 *
 * @nuciewth 
 * @version 1.00 2008/6/29
 */


public class Fenyu {

public Fenyu() {
}
public static void main (String[] args) {
int temp=1;
for(int i = 1 ; i < 6; i++){
temp=temp*5+1;
}
System.out.println(temp);

}
[解决办法]
给一个简单的算法,不需要递归
Java code
  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;      }    }  }
[解决办法]
决定研究下算法了......
[解决办法]
用递归怎么做的来的就有问题啊??
来个大虾解决下啊!!

热点排行