Computer >> Máy Tính >  >> Lập trình >> C ++

Mã C ++ để đếm trẻ em sẽ nhận được bóng sau mỗi lần ném

Giả sử chúng ta có một số n. Rất ít trẻ em đang đứng trên một vòng tròn. Chúng được đánh số từ 1 đến n, xếp theo chiều kim đồng hồ và trẻ số 1 đang cầm quả bóng. Đầu tiên trẻ số 1 ném quả bóng cho trẻ tiếp theo theo chiều kim đồng hồ, sau đó trẻ số 2 ném bóng cho trẻ tiếp theo nhưng một trẻ (với trẻ số 4), trẻ thứ 4 ném bóng cho trẻ số 7 và Sớm. Khi ném một quả bóng, nó có thể vượt qua phần đầu của vòng tròn. Không phải tất cả trẻ em đều nhận được bóng trong trò chơi. Nếu trẻ không lấy được bóng, Chúng ta phải tìm số trẻ sẽ lấy được bóng sau mỗi lần ném.

Vì vậy, nếu đầu vào là n =10, thì đầu ra sẽ là [2, 4, 7, 1, 6, 2, 9, 7, 6].

Các bước

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

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

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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);
}

Đầu vào

10

Đầu ra

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