JAVA 數三退一問題的解決

2021-07-11 09:34:23 字數 808 閱讀 9700

數三退一:

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個人圍成乙個圈 陣...