扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
//楼上几位的有逻辑问题
伊通ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联建站的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18982081108(备注:SSL证书合作)期待与您的合作!
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);
}
}
设这一堆桃子至少有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
public class Monkey
{
public static void main(String[] args)
{
int sum=0,remain=1;
//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量
for(int day=9;day=1;day--)
{
sum=(remain+1)*2;
remain=sum;
System.out.println("第"+day+"天还剩"+remain+"个桃子");
}
System.out.println(sum);
}
}
答案是:3121个
思路:结果肯定是(5的某个倍数+1),从6开始,以五递增,验证能否满足条件,第一个能满足条件的就是结果。所谓满足条件就是减1后能被5整除,之后乘以4/5后,还能满足这个条件,循环5次。
源代码如下:
#include iostream.h
void main()
{
int i;
int j;
int k;
for (i = 6, j = 6, k = 0; k 5; )
{
if ((j - 1) % 5 == 0)
{
j = (j - 1) / 5 * 4;
k++;
}
else
{
i = i + 5;
j = i;
k = 0;
}
}
cout i endl;
}
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)!
}
}
不好意思啊,由于刚才比较赶时间,没好好写!
这回你再看看!! 如果还有哪里不清楚的话就问我好了!!
public class MonkeyTest {
public static void main(String[] args) {
int sum=0;
int cnt=0;
outer:
for(int i=6;i10000;i++){
sum=i;
cnt=0;
for(int j=0;j5;j++){
if(sum%5==1){
sum=sum-((sum/5)+1);
cnt++;
if(cnt==5){
System.out.println(i);
break outer;
}
}else{
break;
}
}
}
}
}
/*
run:
3121
成功生成(总时间:0 秒)
分析:
624*5+1=3121
499*5+1=2497
399*5+1=1997
319*5+1=1597
255*5+1=1276
*/
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流