C++ジョセフリングの実例コード


C++ジョセフリングの実例コード
ジョセフ環は数学の応用問題です。n人を知っています。(番号1、2、3…nでそれぞれ表します。)円卓の周りに座っています。番号がkの人からスタートして、数えてmのその人まで列挙します。彼の次の人はまた1から数えて、mまで数える人はまた並べます。この規則に従って繰り返し続けて、円卓の周囲の人まですべて列に出ます。
n人がいて、すべての人が退去したいなら、一人でmを叫んでから退却できます。だから、n*mは全部の人の合計回数です。
コード:

/* 
 *         
 */ 
#include <stdio.h> 
 
int main() 
{ 
  char peo[100] ; 
  char *p_peo = peo; 
  int i , n , skip , flag[100] = {0} , cnt; 
  int *p_flag = NULL; 
  printf("     :"); 
  scanf("%d", &n); 
  printf("     :
"); for(p_peo , i = 0 ; p_peo < peo + n ; ++p_peo , ++i) { *p_peo = 'a' + i; printf("%c ", *p_peo); } printf("
"); printf(" :"); scanf("%d", &skip); cnt = 0; while(cnt <= n * skip) { for(p_peo = peo , p_flag = flag ; p_peo < peo + n ; ++p_peo , ++p_flag) { if(*p_flag) continue; cnt++; if(!(cnt % skip)) { *p_flag = 1; printf("%c ", *p_peo); } } } printf("
"); return 0; }
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。