7-1 Josephus.c
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 41 4 #define M 3 5 int main() 6 { 7 int man[N]={0}; 8 int count=1; 9 int i=0,pos=-1; 10 int alive=0; 11 while(count<=N) 12 { 13 do{ 14 pos=(pos+1) % N; //环状处理 15 if(man[pos]==0) 16 i++; 17 if(i==M) //报数3的人 18 { 19 i=0; 20 break; 21 } 22 }while(1); 23 man[pos]=count; 24 count++; 25 } 26 printf("\n约瑟夫排列(最初位置-约瑟夫环位置):\n"); 27 for(i=0;i<N;i++) 28 { 29 printf("%d-%d ",i+1,man[i]); 30 if(i!=0 && i%10==0) //每输出10个则换行 31 printf("\n"); 32 } 33 printf("\n\n准备剩下的人数?"); 34 scanf("%d", &alive); 35 printf("这%d人初始位置应排在以下序号:\n",alive); 36 alive=N-alive; 37 for(i=0;i<N;i++) 38 if(man[i]>alive) 39 printf("初始序号:%d,约瑟夫环序号:%d\n",i+1,man[i]); 40 printf("\n"); 41 getch(); 42 return 0; 43 }