숫자 n이 있다고 가정합니다. 소수의 아이들이 원 위에 서 있습니다. 그들은 1에서 n까지 번호가 매겨져 있으며 시계 방향으로 있으며 어린이 번호 1은 공을 잡고 있습니다. 먼저 1번 아이가 시계 방향으로 다음 아이에게 공을 던졌습니다. 그런 다음 2번 아이가 한 명의 다음 아이에게 공을 던졌습니다. (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,