Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

공을 던질 때마다 공을 얻을 어린이를 계산하는 C++ 코드

<시간/>

숫자 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,