C++ジョセフリングの実例コード
C++ジョセフリングの実例コード
ジョセフ環は数学の応用問題です。n人を知っています。(番号1、2、3…nでそれぞれ表します。)円卓の周りに座っています。番号がkの人からスタートして、数えてmのその人まで列挙します。彼の次の人はまた1から数えて、mまで数える人はまた並べます。この規則に従って繰り返し続けて、円卓の周囲の人まですべて列に出ます。
n人がいて、すべての人が退去したいなら、一人でmを叫んでから退却できます。だから、n*mは全部の人の合計回数です。
コード:
ジョセフ環は数学の応用問題です。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;
}
疑問があれば、メッセージをお願いします。あるいは、当駅のコミュニティで交流して討論してください。ありがとうございます。