约瑟夫环 曾经终败给现在 2022-02-28 00:54 237阅读 0赞 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 定义很简单,根据定义,采用循环链表来实现,有一点需要注意的是边界问题,把边界问题处理好了,程序就容易真正实现了。以下是代码: //约瑟夫环 #include<stdio.h> #include<stdlib.h> typedef struct Linklist { int data; struct Linklist * next; }ListNode,*List; //约瑟夫环 void Josephus( int n, int k, int m); int main() { Josephus(9,1,5); } //n为总人数,k为第一个开始报数的人,m为出列者喊到的数 void Josephus( int n, int k, int m) { // p为当前结点,r为辅助结点,指向p的前驱结点,L为头节点 List p,r,L; p = r = L = NULL; int i; for ( i = 0; i < n; i++ ) { p = (List)malloc(sizeof(ListNode)); p->data = i + 1; if ( L == NULL ) { L = p; r = p; } else { r->next = p; r = p; } } //使链表连起来 p->next = L; //打印链表 p = L; printf("链表元素:"); for ( i = 0; i < n; i++ ) { printf("%4d",p->data); p = p->next; } p = L; //把指针指向第一个报数的人 for ( i = 1; i < k; i++ ) { r = p; p = p->next; } printf("\n出列顺序:"); //循环的删除队列结点 while ( p->next != p ) { for ( i = 0; i < m - 1; i++ ) { r = p; p = p->next; } //指向的是第一个人,则将r指向最后一个元素 if ( p == L ) { L = p->next; r = p; while( r->next != p ) r = r->next; } r->next = p->next; printf("%4d",p->data); free(p); p = r->next; } printf("%4d\n",p->data); } 运行结果: ![20130503094829342][] [20130503094829342]: /images/20220228/6c72cdefe52d4179a138a74327ae0441.png
相关 约瑟夫环 约瑟夫环 1、参考资料 https://blog.csdn.net/shuaicihai/article/details/54847433 2、使用数组 痛定思痛。/ 2022年11月27日 06:54/ 0 赞/ 184 阅读
相关 约瑟夫环 package com.someusefuldesign.demo; import java.util.ArrayList; /约瑟 桃扇骨/ 2022年08月13日 15:54/ 0 赞/ 183 阅读
相关 约瑟夫环 \include<stdio.h> \include<stdlib.h> /\ 约瑟夫环是一个数学的应用问题: 已知n个人(以编号1,2,3...n分别表示)围 ╰半夏微凉°/ 2022年08月07日 01:53/ 0 赞/ 204 阅读
相关 约瑟夫环 约瑟夫环 约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个 怼烎@/ 2022年07月15日 13:39/ 0 赞/ 199 阅读
相关 约瑟夫环 N个人坐成一个圆环(编号为1 - N),从第1个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。 例如:N = 3,K = 2。2号先出列,然后是 桃扇骨/ 2022年06月11日 06:26/ 0 赞/ 208 阅读
相关 约瑟夫环 【问题描述】 编号为 1,2,...,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。现在给定一个随 机数 m>0,从编号为 1 的人开始,按顺时针方向 1 今天药忘吃喽~/ 2022年04月22日 06:06/ 0 赞/ 254 阅读
相关 约瑟夫环 > 约瑟夫环运作如下: > 1、一群人围在一起坐成 \[2\] 环状(如:N) > 2、从某个编号开始报数(如:K) > 3、数到某个数(如:M)的时候,此人出列, 阳光穿透心脏的1/2处/ 2022年03月22日 16:38/ 0 赞/ 303 阅读
相关 约瑟夫环 约瑟夫环:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规 曾经终败给现在/ 2022年02月28日 00:54/ 0 赞/ 238 阅读
相关 约瑟夫环 编号为1,2,…,n的n个人按顺时针方向围坐在一张圆桌周围,每人持有一个密码(正整数)。一 开始任选一个正整数m作为报数上限值,从第一个人开始按顺时针方向自1开始报数,报到m时 r囧r小猫/ 2021年12月20日 04:29/ 0 赞/ 320 阅读
相关 约瑟夫环 int cir(int n,int m) { int p=0; for(int i=2;i<=n;i++) { 我会带着你远行/ 2021年12月16日 15:13/ 0 赞/ 330 阅读
还没有评论,来说两句吧...