约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列
#include <stdio.h> #include <stdlib.h> #define N 41 #define M 3 int main() { int man[N]={0}; int count=1; int i=0,pos=-1+k; int alive=0; while(count<=N) { do{ pos=(pos+1) % N; //环状处理 if(man[pos]==0) i++; if(i==M) //报数3的人 { i=0; break; } }while(1); man[pos]=count; count++; } printf("\n约瑟夫排列(最初位置-约瑟夫环位置):\n"); for(i=0;i<N;i++) { printf("%d-%d ",i+1,man[i]); if(i!=0 && i%10==0) //每输出10个则换行 printf("\n"); } printf("\n\n准备剩下的人数?"); sca |