实习题-约瑟夫环问题(一)

//约瑟夫问题的静态链解法
#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); //将出列的人的编号输出
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fanxp66/article/details/6919106