「猴子分桃java」猴分桃问题
今天给各位分享猴子分桃java的知识,其中也会对猴分桃问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
猴子分桃问题,用Java代码实现
设这一堆桃子至少有x个,先借给它们4个,5个猴子分别拿 了 a、b、c、d 、e个桃子(其中包括吃掉的一个),则可得:
a=1/5*(x+4)
b=1/5*4/5*(x+4)=4/5^2*(x+4)
....
e= 4^4/5^5*(x+4)
e应为整数,而4的4次方不能被5的5次方整除,只有(x+4)应是5的5次方的倍数,所以
(x+4)=3125k(k取自然数)
当k=1时,x=3121
这样得出一个算式,设有n个猴子,即n-1的n-1次方除以n的n次方=x+n-1
以n为传入的参数,x为返回值
x=n的n次方-n-1
猴子分桃(java问题)
public static void main(String[] args) {
int sum2; //用来进行逻辑运算的桃子总数
int sum1 = 6; //实际的桃子总数
int count; //分桃子次数(控制内层循环)
int index; //分桃子次数(符合分桃方案的次数)
boolean flag = true; //控制外层循环
while(flag){
index = 0; //初始化分桃子的次数为0
count = 0; //初始化为第一个猴子开始分桃子
sum2 = sum1; //初始化逻辑运算的桃子总数为实际的桃子总数,因为此变量用于计算,所以值会改变,为了不影响实际的桃子总数,所以用此变量代替!
while(count 5){ //猴子开是分桃子了!
if(sum2%5 == 1){ //如果桃子总数除以5余1说明此桃子总数符合分桃方案(sum2%5 == 1)
sum2 -= 1; //因为桃子被猴子扔掉一个,所以要减1
sum2 -= sum2/5; //又因为桃子被平均分为了5份并且被猴子拿走了1份,所以要减1/5
index++; //如果符合分桃方案就将计数器加1
}
if(index == 5){ //如果计数器等于5,也就是桃子的总数在符合分桃方案(sum2%5 == 1)的前提下分可5次的话!说明此桃子总数是符合条件的最小整数!
System.out.println("最少有 " + sum1 + " 个桃子!");
flag = false;//关闭外层循环;
break; //跳出内层循环;
}
count++; //5个猴子分桃子嘛!第一个分完了,当然该轮到第二个了!!所以要递增!
}
sum1 += 5; //桃子的总数只有每次递增5才可以符合分桃方案(sum2%5 == 1)!
}
}
不好意思啊,由于刚才比较赶时间,没好好写!
这回你再看看!! 如果还有哪里不清楚的话就问我好了!!
用JAVA,递归,写猴子分桃问题
//楼上几位的有逻辑问题
public
class
Dg
{
static
int
ts=0;//桃子总数
int
fs=1;//记录分的次数
static
int
hs=5;//猴子数...
int
tsscope=5000;//桃子数的取值范围,范转太大容易溢出.
public
int
fT(int
t){
if(t==tsscope){
//当桃子数到了最大的取值范围时取消递补归
System.out.println("结束");
return
0;
}
else{
if((t-1)%hs==0
fs=hs){
if(fs==hs)
{
System.out.println("桃子数
=
"+ts
+"
时满足分桃条件");
}
fs+=1;
return
fT((t-1)/5*4);//
返回猴子拿走一份后的剩下的总数
}
else
{
//没满足条件
fs=1;//分的次数重置为1
return
fT(ts+=1);//桃子数加+1
}
}
}
public
static
void
main(String[]
args)
{
new
Dg().fT(0);
}
}
猴子分桃java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于猴分桃问题、猴子分桃java的信息别忘了在本站进行查找喔。
发布于:2022-12-17,除非注明,否则均为
原创文章,转载请注明出处。