//约瑟夫问题的静态链解法
#include <stdio.h>
#define N 20
typedef struct
{
int next; //下一人的编号
int mima; //本人持有的密码
}Node;
#include <stdio.h>
#define N 20
typedef struct
{
int next; //下一人的编号
int mima; //本人持有的密码
}Node;
void main()
{
int m,n,mm; //m为密码值,n为人数,mm为接受输入密码的变量
int i,p,q;
Node a[N];
printf("请输入人数(<%d)和密码的初值:",N);
scanf("%d%d",&n,&m);
if(n<=0||m<=0)
return ;
//输入密码并形成静态环型链表
i=1;
while(i <= n)
{
printf("请输入第 %d 个人的密码:",i);
scanf("%d",&mm);
if(mm<=0)
continue;
a[i].next=i+1;
a[i].mima=mm;
i++;
}
a[i-1].next = 1;
p=1;
i=1;
while(a[p].next!=p)
{
q=p;
p=a[p].next;
i++;
if(i==m)
{ //从静态链中删除一个元素
a[q].next = a[p].next;
m = a[p].mima;
i = 0;
printf("%d\t",p); //将出列的人的编号输出
}
}
}