數三退一:
500個小孩手拉手圍成一圈,從第乙個小孩開始數數,按照1、2、3、1、2、3迴圈不斷的數,數到3的小孩退出圈,其他小孩接著數,直到剩下乙個小孩,問這個小孩的排在什麼位置?
思路分析:可以定義乙個布林型的陣列,用來存放500個小孩,若為true,代表在圈內,若為false,則代表出圈。首先,每個小孩都在圈內(即陣列中的元素都賦值為true),從第乙個小孩開始數,首先判斷其是否在圈內,若在,繼續數(countnum自加1),若不在,忽略掉他的存在,從下個小孩接著數,當數到3時,這個小孩定義為false,剩餘小孩的的數目自減1,知道剩乙個小孩。
問題解決:
publicclasscount3quit
intleftcount = arr.
length
; //
剩下的人數,初值為
500
intcountnum = 0;
//幾個人一輪
intindex = 0;
//數到第幾個人
while(leftcount > 1) }
index ++;
if(index == arr.
length)
} for(inti=0; ilength
; i++) }
} }
解決數三退一問題(陣列,物件導向)
500個小孩手拉手圍成乙個圈,第乙個小孩從0開始數,數到3,就淘汰出局,退出這個圈,直至剩餘最後乙個,輸出該小孩。建立小孩陣列,並將每個小孩賦布林初值為 true 表示在圈內 預設從陣列下標為0開始數,用count 計數 初值為1 當count 3 淘汰這個小孩,即將其值設為false,並將計數器c...
繼續磕演算法呵呵。數三退一問題。
邏輯倒是夠清晰,不過直覺告訴我方法肯定能改進。初始化陣列。boolean list new boolean 500 for int i 0 i list.length i count用來數三,limit用來在陣列裡只有乙個true的時候結束迴圈。int count 0 int limit 0 如果上...
數三退一問題 拉手成圈出圈問題
一,問題描述 500個人圍成一圈 從第乙個人開始數數,第乙個人數1 第二個人數2 第三個人數3 數到3的人退出圈子,第四個人重新開始數數 第四個數1 第五個2 第六個 3 退出圈子 一直這樣數下去,求最後剩餘的那個人所在位置。二,問題詳細求解思路 1.面向過程的思想 陣列表示500個人圍成乙個圈 陣...