100 人圍成一圈,順時針方向依序從 1 排到 100 號,遊戲開始從 1 號玩家開始淘汰,被淘汰者就移走,然後順時針方向跳過 1 個人,換 3 號玩家被淘汰,再來跳過 2 個人,換 6 號玩家被淘汰,就這樣順時針方向進行,每次增加 1 個人跳過,然後淘汰一個人。
請問最後一位生存者是幾號?
這一題是 Andy 自己想的,又是一題圓周類型問題。
洛書重大發現
-
轉自研發養成所。 下面談談我對河圖和洛書的看法。 (2021-9-12 11:07:38) 河圖表示數的序,洛書表示數的量。
河圖表示陰陽互補,洛書表示內外平衡。
河圖說明了十進制的理由,由一到二,因為一如果是陽,那麼二作為陰就置於一的對面。三跟四亦是同樣,五就在中間。那麼六就是一加五,七八九亦同。十就是...
4 天前
31
回覆刪除正解,請問你採用何種方法解出?
刪除用程式語言求出
回覆刪除1. 此題不適合用 C 語言求解,
原因主要是陣列刪除一個元素是將該元素設為零, 陣列個數不變, 如果陣列個數也要跟著減一, C 語言處理起來會很困難
2. 這也算是 C 語言 的缺點, 也可不算是 C 語言 的缺點
因為每種程式語言都有其特定使用之處, 如 FORTRAN 適合於計算方面, COBOL 適合於商業方面
剛好 C 語言不適合於這類題目
3. 使用 Excel VBA 求解,
Excel VBA 刪除一個元素不是將該元素設為零, 而是刪除, 陣列個數也跟著減一
刪除動作執行99次, 剩下的一個元素就是答案
程式如下:
Sub Button1_Click()
Dim HundredNumbers As New Collection
Dim i, j, k As Integer
k = 1
For i = 1 To 100
HundredNumbers.Add i
Next
For j = 0 To 98
k = k + j
If k <= HundredNumbers.Count Then
HundredNumbers.Remove k
Else
Do Until k <= HundredNumbers.Count
k = k - HundredNumbers.Count
Loop
HundredNumbers.Remove k
End If
Next
MsgBox "HundredNumbers.count= " & HundredNumbers.Count
MsgBox "HundredNumbers.item[1]= " & HundredNumbers(1)
End Sub
謝謝你分享程式碼,這題我是用 Python 求解,Python 範例。
刪除其實這程式設計關鍵在資料結構,不管何種程式語言,陣列的長度是不可變的,本題不容易以陣列解題,可是使用 List 串列清單,可以輕易將資料從清單中插入或刪除,所以我用 List 解題。
對了,這題倖存者隱藏著一個數列,不知能有興趣一起申請 OEIS?