约瑟夫环问题 青旅半醒 2022-03-27 14:54 232阅读 0赞 /* 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Josephus) */ #include <stdio.h> #include <stdlib.h> // 链表节点 typedef struct _RingNode { int pos; // 位置 struct _RingNode *next; }RingNode, *RingNodePtr; // 创建约瑟夫环,pHead:链表头指针,count:链表元素个数 void CreateRing(RingNodePtr pHead, int count) { RingNodePtr pCurr = NULL, pPrev = NULL; int i = 1; pPrev = pHead; while(--count > 0) { pCurr = (RingNodePtr)malloc(sizeof(RingNode)); i++; pCurr->pos = i; pPrev->next = pCurr; pPrev = pCurr; } pCurr->next = pHead; // 构成环状链表 } void PrintRing(RingNodePtr pHead) { RingNodePtr pCurr; printf("%d", pHead->pos); pCurr = pHead->next; while(pCurr != NULL) { if(pCurr->pos == 1) break; printf("\n%d", pCurr->pos); pCurr = pCurr->next; } } void KickFromRing(RingNodePtr pHead, int m) { RingNodePtr pCurr, pPrev; int i = 1; // 计数 pCurr = pPrev = pHead; while(pCurr != NULL) { if (i == m) { // 踢出环 printf("\n%d", pCurr->pos); // 显示出圈循序 pPrev->next = pCurr->next; free(pCurr); pCurr = pPrev->next; i = 1; } pPrev = pCurr; pCurr = pCurr->next; if (pPrev == pCurr) { // 最后一个 printf("\n%d", pCurr->pos); // 显示出圈循序 free(pCurr); break; } i++; } } int main() { int m = 0, n = 0; RingNodePtr pHead = NULL; printf("---------------Josephus Ring---------------\n"); printf("N(person count) = "); scanf("%d", &n); printf("M(out number) = "); scanf("%d", &m); if(n <= 0 || m <= 0) { printf("Input Error\n"); system("pause"); return 0; } // 建立链表 pHead = (RingNodePtr)malloc(sizeof(RingNode)); pHead->pos = 1; pHead->next = NULL; CreateRing(pHead, n); #ifdef _DEBUG PrintRing(pHead); #endif // 开始出圈 printf("\nKick Order: "); KickFromRing(pHead, m); printf("\n"); system("pause"); return 0; }
相关 约瑟夫环问题 约瑟夫环问题 【问题描述】 有 M 个人,其编号分别为 1-M。这 M 个人按顺序排成一个圈。现在给定一个数 N,从第一个人开始依次报数,数到 N 的人出列,然后又从下一个 末蓝、/ 2022年06月08日 03:19/ 0 赞/ 186 阅读
相关 约瑟夫环问题 list1 = [1 for _ in range(30)] 用1代表活人,0代表死人,先创建一个30个活人的列表 index = 0 索引,用来遍历 青旅半醒/ 2022年05月30日 10:39/ 0 赞/ 159 阅读
相关 约瑟夫环问题 ![这里写图片描述][70] public class Solution { //约瑟夫环问题 public int LastRema 曾经终败给现在/ 2022年05月24日 01:53/ 0 赞/ 191 阅读
相关 约瑟夫环问题 问题描述: N个人围成一圈,从第一个开始报数,第M个将淘汰,退出圈外,重复上述过程n-1次,最后剩下一个,最后留下来的人获胜。求出最后获胜者的编号。 if __n ╰+哭是因爲堅強的太久メ/ 2022年05月17日 01:20/ 0 赞/ 132 阅读
相关 约瑟夫环问题 约瑟夫环问题 / n个人(编号 1...n),先去掉第m个数,然后从m+1个开始报1, 报到k的退出,剩下的人继续从1开始报数.求胜利者的编号. 适用数据范围较小 谁借莪1个温暖的怀抱¢/ 2022年05月15日 02:44/ 0 赞/ 152 阅读
相关 约瑟夫环问题 / 约瑟夫环问题(Josephus) 用户输入M,N值,从1至N开始顺序循环数数,每数到M输出该数值,直至全部输出。写出C程序。(约瑟夫环问题 Joseph 青旅半醒/ 2022年03月27日 14:54/ 0 赞/ 233 阅读
相关 约瑟夫环问题 先贴着 慢慢研究 : [https://www.cnblogs.com/cmmdc/p/7216726.html][https_www.cnblogs.com_cmmdc_ àì夳堔傛蜴生んèń/ 2022年03月17日 14:14/ 0 赞/ 193 阅读
相关 约瑟夫环问题 转载自[https://my.oschina.net/jack90john/blog/1791110?p=1][https_my.oschina.net_jack90john_ 拼搏现实的明天。/ 2022年03月01日 04:12/ 0 赞/ 218 阅读
相关 约瑟夫环问题 ![ContractedBlock.gif][] ![ExpandedBlockStart.gif][] 1 include <iostream> 2 今天药忘吃喽~/ 2021年12月13日 02:45/ 0 赞/ 277 阅读
相关 约瑟夫环问题 问题描述 1 - n 个人围坐一圈,约定编号为k的人开始报数,数到m的那个人出列,直到所有人出列,由此产生一个队编号的序列 问题分析 1. 先构造一个环形的单向 叁歲伎倆/ 2021年11月01日 22:40/ 0 赞/ 302 阅读
还没有评论,来说两句吧...