渔夫分鱼算法 求解
A,B,C,D,E五个渔夫夜间合伙捕鱼,凌晨都疲惫不堪,各自在草丛中熟睡。第二天清晨A先醒来,他把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,B醒来后,也把鱼均分五份,把多余的一条扔回湖中,便拿了自己的一份回家了,C,D,E也按同样方法分鱼。问5人至少捕到多少条鱼?
程序是:
/**
* 渔夫分鱼
* @param n
* 人数
* @return
* 原始总鱼数
*/
static int devideFish(int n) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
int sum = i;
for (int j = 0; j < n; j++) {
if (sum % n == 1)
sum = (sum / n) * 4;
else
sum = 0;
}
if (sum != 0)
return i;
}
return -1;
}
运行过后的答案是:3121 求那么大哥帮我讲解一下这个程序的意思!小弟感激不尽
------解决方案--------------------这是一个穷举方式来获得值的:从0开始一直到Integer能表示的最大整数,一个一个判断符合要求的整数(鱼的个数)。另外,这个方法是想扩展下问题,n渔夫的场景,只是方法里的4不合理,应改为(n-1)。具体注释如下:
//n表示几个渔夫,本题填5
static int devideFish(int n) {
//从0开始,一直到Integer的最大值,挨个查找符合要求的整数
for (int i = 0; i < Integer.MAX_VALUE; i++) {