Java演算法 進3退一

2021-06-25 16:02:14 字數 1630 閱讀 1528

演算法心得:

1、花費了一晚上和一上午

2、要把整個過程分析透徹。

3、要把整個過程模擬的很清楚,就像把發生的過程中每一步,都要描述一遍,當然描述是用程式來說的。是用迴圈來做的。

演算法過程:

需要引數:

1 i,做為陣列下標

2、j,做為數到3的記數

3、quitnum,做為退出人的記數

邏輯情況:

1、當退出的時候,陣列元素如何處理(讓其等於0)

2、當 i 算到最後時,如果能返回i- 0重新計算(i = i - group.length),這樣就算i超出了乙個,仍然算到了i - 1頭上。

3、每當 j 要加的時候,當j = 3後,j的後乙個和後二個肯定不會退出。所以在j =3後,j後兩個元素可以忽略。

4、如果 出現3的情況,一定要判斷 j 後邊的元素是否退出,也即group[i]是否為0,所以需要在每一次j++的前面,都要判斷,如果後面的已經退出,則使用continue關鍵字。不用j++了。但是i還是要加。

5、相應的,i++後面,group前面,一定要判斷,是否超出邊界了,如果超出,則i = i - group.length.

6、在任何時候,一但出現有人退出的情況,要讓quitnum++,一但quitnum判斷,還剩下乙個人(

if (quitnum == group.length - 1)

那邊就啥也不做了,趕緊break,退出迴圈,並在下邊 的處理中,把最後的這個人的 i 記錄並return出去。

思路歷程:

剛開始反反覆覆在修改,但是慢慢就確定了引數和邏輯。

程式真的是一步步先有個大概,然後不斷的去摸索事實,用程式去最大限度的模擬事實,才算出來的。

package chapter5;

public class count3quit

system.out.println();

system.out.println("count 3 then quit...");

system.out.println("the one who is be left finally is:");

system.out.println(count3quit(group500));

} public static int generatearray()

return group500;

} public static int count3quit(int group)

// system.out.println(group.length);

if (group[i] == 0)

if (j == 3)

j = 1;

i++;

}if (i >= group.length)

// system.out.println(group.length);

if (group[i] == 0)

j++;

} int leftnum = -1;// 最後留下來的號

for (int i = 0; i < group.length; i++)

} return leftnum;

}}

JAVA 數三退一問題的解決

數三退一 500個小孩手拉手圍成一圈,從第乙個小孩開始數數,按照1 2 3 1 2 3迴圈不斷的數,數到3的小孩退出圈,其他小孩接著數,直到剩下乙個小孩,問這個小孩的排在什麼位置?思路分析 可以定義乙個布林型的陣列,用來存放500個小孩,若為true,代表在圈內,若為false,則代表出圈。首先,每...

繼續磕演算法呵呵。數三退一問題。

邏輯倒是夠清晰,不過直覺告訴我方法肯定能改進。初始化陣列。boolean list new boolean 500 for int i 0 i list.length i count用來數三,limit用來在陣列裡只有乙個true的時候結束迴圈。int count 0 int limit 0 如果上...

機器學習(一)k 進鄰演算法

概述 原理 存在乙個樣本資料集合,也稱作為訓練樣本集,並且樣本集中每個資料都存在標籤,即我們知道樣本集中每乙個資料與所屬分類的對應關係。輸入沒有標籤的新資料後,將新的資料的每個特徵與樣本集中資料對應的特徵進行比較,然後演算法提取樣本最相似資料 最近鄰 的分類標籤。一般來說,我們只選擇樣本資料集中前k...