永发信息网

【约瑟夫问题】约瑟夫相关问题(C语言)2)反Josephu环问题...

答案:2  悬赏:70  手机版
解决时间 2021-02-06 17:55
  • 提问者网友:捧腹剧
  • 2021-02-06 05:07
【约瑟夫问题】约瑟夫相关问题(C语言)2)反Josephu环问题...
最佳答案
  • 五星知识达人网友:夜风逐马
  • 2021-02-06 06:21
【答案】 反Josephu环问题
  #include
  #include
  typedef struct
  {
   struct T_LIST* pre;
   struct T_LIST* next;
  } T_LIST;
  T_LIST* GetPreOne(T_LIST* ThisOne, int m)
  {
   for (; m > 1; m--)
   {
   ThisOne = ThisOne->pre;
   }
   return ThisOne;
  }
  int main()
  {
   T_LIST* head, //当前
   * pLast,//最后一个人
   * tem, *tem2; //临时交换指针
   int n,//总人数
   m,//循环长度
   x,//最后人
   k,
   i;//当前人数
   printf(输入相关数据(n,m,x):\n);
   scanf(%d,%d,%d, &n, &m, &x);
   pLast = malloc(sizeof(T_LIST));
   head = malloc(sizeof(T_LIST));
   head->pre = head->next = pLast;
   pLast->pre = pLast->next = head;
   printf(n=%d,m=%d,x=%d\n,n,m,x);
   i = 2;
   for (; i pre;//临时指针指向前一个节点
   head->pre = tem2 = malloc(sizeof(T_LIST)); //建立前一局被淘汰者,并构建本局数1的人pre
   tem->next = head->pre;//临时节点修复
   tem2->next = head;//上局淘汰者next修复
   tem2->pre = tem;//上局淘汰者pre修复
   head = head->pre;//指向被淘汰者,准备下轮循环
   }
   //脱离循环后head指向第一个被淘汰者
   //调用GetPreOne,是head指向数1的人
   head = GetPreOne(head, m);
   while (1)
   {
   if (pLast == head)
   {
   break;
   }
   pLast = pLast->next;
   x++;
   }
   k = x % n ;
   if(k==0)
   k=41;
   printf(k = %d\n, k);
   //收尾,释放内存
   while(pLast->next != head)
   {
   pLast = pLast->next;
   free(pLast->pre);
   }
   free(pLast);
   free(head);
   return 0;
  }
  =============================================
  Josephu环问题的变形(p1012)
  #include
  #include
  int fun(char* data, int k, int m);
  int main()
  {
   int k, m;
   char* data;
   printf(Please input k:\n);
   scanf(%d, &k);
   data = malloc(2 * k);
   for (m = k + 1;; m++)
   {
   if (fun(data, k, m))
   break;
   }
   printf(m=%d\n, m);
   free(data);
   return 0;
  }
  int fun(char* data, int k, int m)
  {
   int i = 0, //数数时的位置
   j = 0, //已经杀死的人数
   t = 0; //数数时的累加器
   for (; i
全部回答
  • 1楼网友:山有枢
  • 2021-02-06 06:41
哦,回答的不错
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯