c·c++/c 프로그래밍

수건돌리기, 요세푸스의 문제

바로이순간 2012. 8. 22. 10:53

#include <stdio.h> 

int main() { 

   // 20명까지의 수건돌리기를 할 수 있도록 a의 크기를 20으로 잡았다. 

   int a[20]={0,}; 

   int i, j, n, skip, cnt, x, skipcnt; 

   printf("명수와 몇명씩 건너뛸 것인지 입력하세요: "); 

   scanf("%d%d", &n, &skip);  // 9 5  입력 

   for(i=0;i<n;++i) a[i]=i+1; // 배열에 번호를 채웁니다. 

   cnt=0; // 탈락한 사람의 수 

   skipcnt=0;  // 건너뛴 사람수 

   i=0; // 시작하는 위치 

   j=n%20; // 옮길 위치  

   while(cnt<n-1) { 

        x=a[i]; 

        i=(i+1)%20;  

        skipcnt+=1; 

        if(skipcnt<skip) { 

               a[j]=x; 

               j=(j+1)%20; 

        } 

        else { 

               cnt+=1; 

               skipcnt=0; 

               printf("%d ", x); 

        } 

   } 

   printf("남은 번호: %d", a[i]); 

   return 0;