约瑟夫循环c语言实现 (<<数据结构与算法>>-王曙燕 约瑟夫环问题解答)

来源:互联网 发布:苹果aso优化 编辑:程序博客网 时间:2024/06/05 07:05

问题描述:
这里写图片描述
运行实例:
这里写图片描述
运行结果解析:
这里写图片描述
代码实现:

copyright vivi_and_qiao #include<stdio.h> #include<malloc.h> #include<stdlib.h>typedef struct Lnode {    int num,password;    struct Lnode *next;}node;int m;node *dequeue(node *tem,int a){    for(int i=1;i<a-1;i++)        {            tem=tem->next;        }        m=tem->next->password;//新的mprintf("%d号出列\n",tem->next->num);        return tem->next=tem->next->next; }//全局变量记录每次要进行出列操作的报数 int main(void){    int n;    printf("input number of people:");    scanf("%d",&n);        node *h=(node *)malloc(sizeof(node));        node *flag=h;        node *tem,*t;         h->num=1;        printf("输入第1个人的密码:");         scanf("%d",&(h->password));//1个人的密码;        for(int i=1;i<=n-1;i++)        {            t=(node *)malloc(sizeof(node));            t->num=i+1;            printf("输入第%d个人的密码:",i+1);             scanf("%d",&(t->password));            flag->next=t;            flag=t;        }        t->next=h;        printf("输入开始报数上限:");        scanf("%d",&m);        printf("出列顺序:\n");         flag=dequeue(h,m);        while(n>1)        {            //printf("%d",m);                flag=dequeue(flag,m);                n--;        }           } copyright vivi_and_qiao