java 猴子喫桃問題

問題描述:猴子分桃:海 灘上有一堆桃子,五隻猴子來分。
第一隻猴子把這堆桃子憑據分爲五份,多了一個,
這隻猴子把多的一個扔入海中,拿走了一份。
第二隻猴子把剩下的桃子又平均分成五份,又多了一個,
它同樣把多的一個扔入海中,拿走了一份,
第三、第四、第五隻猴子都是這樣做的,問海灘上原來最少有多少個桃子?
思想:不足之處,歡迎指正。每一隻猴子,都對這堆桃做了相同的操作,採用遞歸調用。判斷條件是每隻猴子都能扔一個桃子之後,能夠分成五份,即對5取餘等於0.
通過循環使桃子數遞增,直到最小的滿足情況出現結束循環。
運行成功,結果爲3121
public class tao{
static int flag=0;
static int temp =0; //記錄跳出循環的條件
public static void main(String[] args)
{
hou2(6);
//最後的一個猴子能扔了一個,分成五份。從這遞增。其實無所謂
}
public static void hou2(int m )//計算多少個桃子的總數
{
for(int i=m;;i+=5)
//i表示桃子總數的遞增 分成五份 每次加五 桃子數肯定是5的倍數+1
{
//System.out.println("i="+i+"\t");
if(temp!=0)
//跳出循環 temp 得到賦值,肯定已經滿足情況了,跳出所有循環
break;
if((i-1)%5==0) //第一隻猴子可以分派
{
flag++;//flag代表能夠有flag只猴子操作
if(flag==5) //第五隻猴子已經可以分配,輸出原來i的值
{
temp=i;
for(int j=flag-1;j>0;j--)
//計算原來有多少隻桃子
{
temp=temp5/4+1;
}
System.out.println(temp);
break;
}
else
hou2((i-1)
4/5);
//還不滿足第五隻桃子,繼續判斷
}
else
{
if(flag!=0)
//不是第一次判斷 並且不滿足猴子分配的情況回到原來的位置
{
int temp=i; //記錄原來的位置
for(int j=flag;j>0;j--)
{
temp=temp*5/4+1;
}
flag=0;
//回到原來的位置,並繼續循環 重置flag
hou2(temp+5);
break;
}
continue;
//是第一次判斷,並且不滿足,繼續下一個循環
}
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章