⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ysf.c

📁 约瑟夫环
💻 C
字号:

 /***========[约瑟夫问题]========***/

 #include <stdio.h>
 #include <stdlib.h>
 typedef struct node

   {
   int data;
   struct node *next;
   }LNode;

   int n,m,nums,v,i,j;
   int k[30];

   LNode* GetNode(LNode*);
   int Print(LNode*,int );
   LNode* Create(int);


  main()
   {
   LNode *p;
   puts("请输入人数n(n<=30)和报数上限m :");
   scanf("%d%d",&n,&m);
   puts("请输入各个密码nums:");
   for(i=0;i<n;++i)
    {scanf("%d",&nums);
     k[i]=nums;}
   p=Create(n);

   Print(p,m);

   }
   LNode* Create(int n ) /*循环函数*/

  { LNode *p,*head,*q;

    head=( LNode*)malloc(sizeof( LNode));

   head->data=1;
   p=head;
   q=head;
    for(i=2;i<=n;i++)
     {
     head=( LNode*)malloc(sizeof( LNode));

    head->data=i;
     p->next=head;
     p=head;


     p->next=NULL;


      }
       p->next=q;
       p=p->next;

   }
    LNode* GetNode(LNode* p) /*初始化函数*/
    { LNode *q;
     while (q->next!=p)
     q=q->next;
     q->next=p->next;
     free(p);
     return(q->next);
     }

   int Print(LNode* p,int m ) /*输出函数*/
     {


      printf("出队编号为:");
      while(p->next!=p)
      {for(i=1;i<=m-1;i++)
       {
       p=p->next;
       }
     v=p->data;

     printf("%d ",p->data);

     m=k[v-1];

     p= GetNode(p);
     }
     printf("%d ",p->data);
     puts ("结束!!");
     getch();}



    









⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -