约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
n=10,k=3
#include<stdio.h>
typedef struct
{
int data[10];
int front;
int rear;
}CirQueue;
void InitQueue(CirQueue &Q)
{
Q.front=Q.rear=0;
}
int InQueue(CirQueue &Q,int x)
{
if((Q.rear+1)%10==Q.front) return 0;
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%10;
return 1;
}
int DelQueue(CirQueue &Q,int x)
{
if(Q.front==Q.rear) return 0;
x=Q.data[Q.front];
Q.front=(Q.front+1)%10;
return 1;
}
void Js(int n,int a)
{
CirQueue S;
int x=1,i=0;
while((S.rear+1)!=S.front)
{
i++;
if(i==a)
{
InQueue(S,x);
i=0;
}
x++;
}
while(S.front!=S.rear)
{
DelQueue(S,x);
printf("%d ",x);
}
}
void main()
{
Js(10,3);
}
没有语法报错,不能正常运行求看程序