C++程式碼:統計每次投擲後拿到球的孩子數量


假設我們有一個數字n。一些孩子站在一個圓圈上。他們的編號從1到n,按順時針順序排列,1號孩子拿著球。首先,1號孩子把球傳給下一個順時針方向的孩子,然後2號孩子把球傳給下下一個孩子(4號孩子),然後4號孩子把球傳給7號孩子,依此類推。當球被丟擲時,它可能會超過圓圈的起點。並非所有孩子在遊戲中都能拿到球。如果一個孩子沒有拿到球,我們需要找到每次投擲後拿到球的孩子們的編號。

因此,如果輸入是n = 10,則輸出將是[2, 4, 7, 1, 6, 2, 9, 7, 6]。

步驟

為了解決這個問題,我們將遵循以下步驟:

p := 1
for initialize i := 1, when i < n, update (increase i by 1), do:
   p := p + i
   p := p mod n
   if not p is non-zero, then:
      p := n
   print p

示例

讓我們看看下面的實現以更好地理解:

#include <bits/stdc++.h>
using namespace std;
void solve(int n){
   int p = 1;
   for (int i = 1; i < n; i++){
      p += i;
      p %= n;
      if (!p)
         p = n;
      printf("%d, ", p);
   }
}
int main(){
   int n = 10;
   solve(n);
}

輸入

10

輸出

2, 4, 7, 1, 6, 2, 9, 7, 6,

更新於:2022年3月30日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.