最少合伙捕到3906条鱼
A醒来发现鱼数是3906
B醒来发现鱼数是781
C醒来发现鱼数是156
D醒来发现鱼数是31
E醒来发现鱼数是6
/*** 计算捕鱼
*/
public class Fish {
public String[] piscators = { "A", "B", "C", "D", "E"}
public static void main(String[] args) 姿陵锋{
Fish fish = new Fish()
for (int i = 0 i < 10000 i++) {
if (fish.averageFish(fish.piscators.length, i)) {
fish.averageFish(i)
break
}
}
}
/**
* 判断平均分鱼
* @param piscatorSize
* @param fishNum
* @return
*/
public boolean averageFish(int piscatorSize, int fishNum) {
boolean isAaverage = (fishNum - 1) % piscators.length == 0
//最后一个人也分成五分 所以piscatorSize > 0 多分一次。
if (isAaverage && piscatorSize > 0) {
return averageFish(piscatorSize - 1, (fishNum - 1) / piscators.length)
}
return isAaverage
}
/**
* 汪乎输出分鱼过程
* @param fishNum
*/
public void averageFish(int fishNum) {
迹晌System.out.println("最少合伙捕到"+ fishNum + "条鱼")
for (int i = 0 i < piscators.length i++) {
System.out.println(piscators[i] + "醒来发现鱼数是" + fishNum)
fishNum = (fishNum - 1) / piscators.length
}
}
}
首先你要明白sub(n)表示的是第n个人醒来弊腔的鱼数目,所以可以得到sub(n)-[sub(n)-1]/5-1=sub(n-1)也就是sub(n)=sub(n-1)/4*5+1然后需要确定的是sub(n-1)必须满足sub(n-1)%4==0
然后就反复调用t=sub(n-1),直到找到合适值,t第一次调用的值是6,然后是11,16.。。。。static int i保证在原有基础上加
也早陆就是租睁衫说t的取值范围也就是
f (n == 1) /*当n等于1时递归结束*/
{
static int i = 0
do
{
i++
}
while (i % 5 != 0)
return (i + 1)
t=i+1t={"6,11,16,21,26....................."} 依次遍历找到合适值
语言表达能力比较差,希望你能明白
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)