//樓上幾位的有邏輯問題
伊通ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)建站的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
public
class
Dg
{
static
int
ts=0;//桃子總數(shù)
int
fs=1;//記錄分的次數(shù)
static
int
hs=5;//猴子數(shù)...
int
tsscope=5000;//桃子數(shù)的取值范圍,范轉(zhuǎn)太大容易溢出.
public
int
fT(int
t){
if(t==tsscope){
//當(dāng)桃子數(shù)到了最大的取值范圍時取消遞補(bǔ)歸
System.out.println("結(jié)束");
return
0;
}
else{
if((t-1)%hs==0
fs=hs){
if(fs==hs)
{
System.out.println("桃子數(shù)
=
"+ts
+"
時滿足分桃條件");
}
fs+=1;
return
fT((t-1)/5*4);//
返回猴子拿走一份后的剩下的總數(shù)
}
else
{
//沒滿足條件
fs=1;//分的次數(shù)重置為1
return
fT(ts+=1);//桃子數(shù)加+1
}
}
}
public
static
void
main(String[]
args)
{
new
Dg().fT(0);
}
}
設(shè)這一堆桃子至少有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應(yīng)為整數(shù),而4的4次方不能被5的5次方整除,只有(x+4)應(yīng)是5的5次方的倍數(shù),所以
(x+4)=3125k(k取自然數(shù))
當(dāng)k=1時,x=3121
這樣得出一個算式,設(shè)有n個猴子,即n-1的n-1次方除以n的n次方=x+n-1
以n為傳入的參數(shù),x為返回值
x=n的n次方-n-1
public class Monkey
{
public static void main(String[] args)
{
int sum=0,remain=1;
//每天吃剩的桃子加一個正好是前一天桃子的一半,每天桃子的總數(shù)就是前一天剩下桃子的數(shù)量
for(int day=9;day=1;day--)
{
sum=(remain+1)*2;
remain=sum;
System.out.println("第"+day+"天還剩"+remain+"個桃子");
}
System.out.println(sum);
}
}
答案是:3121個
思路:結(jié)果肯定是(5的某個倍數(shù)+1),從6開始,以五遞增,驗證能否滿足條件,第一個能滿足條件的就是結(jié)果。所謂滿足條件就是減1后能被5整除,之后乘以4/5后,還能滿足這個條件,循環(huán)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; //用來進(jìn)行邏輯運(yùn)算的桃子總數(shù)
int sum1 = 6; //實際的桃子總數(shù)
int count; //分桃子次數(shù)(控制內(nèi)層循環(huán))
int index; //分桃子次數(shù)(符合分桃方案的次數(shù))
boolean flag = true; //控制外層循環(huán)
while(flag){
index = 0; //初始化分桃子的次數(shù)為0
count = 0; //初始化為第一個猴子開始分桃子
sum2 = sum1; //初始化邏輯運(yùn)算的桃子總數(shù)為實際的桃子總數(shù),因為此變量用于計算,所以值會改變,為了不影響實際的桃子總數(shù),所以用此變量代替!
while(count 5){ //猴子開是分桃子了!
if(sum2%5 == 1){ //如果桃子總數(shù)除以5余1說明此桃子總數(shù)符合分桃方案(sum2%5 == 1)
sum2 -= 1; //因為桃子被猴子扔掉一個,所以要減1
sum2 -= sum2/5; //又因為桃子被平均分為了5份并且被猴子拿走了1份,所以要減1/5
index++; //如果符合分桃方案就將計數(shù)器加1
}
if(index == 5){ //如果計數(shù)器等于5,也就是桃子的總數(shù)在符合分桃方案(sum2%5 == 1)的前提下分可5次的話!說明此桃子總數(shù)是符合條件的最小整數(shù)!
System.out.println("最少有 " + sum1 + " 個桃子!");
flag = false;//關(guān)閉外層循環(huán);
break; //跳出內(nèi)層循環(huán);
}
count++; //5個猴子分桃子嘛!第一個分完了,當(dāng)然該輪到第二個了?。∷砸f增!
}
sum1 += 5; //桃子的總數(shù)只有每次遞增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
*/
本文題目:java猴子分桃代碼,猴子吃桃子java
本文鏈接:http://chinadenli.net/article14/hegjde.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、網(wǎng)站維護(hù)、移動網(wǎng)站建設(shè)、App開發(fā)、網(wǎng)頁設(shè)計公司、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)