#include<stdio.h> #include<stdlib.h> //n个人坐一圈,从头开始数,每次数到M的出列,求最后出列的人 void loop(int n,int M) { int a[n],m=0,number=0; int i,j; for(j=0;j<n;j++) { a[j]=(j+1);//初始化数组,第一个人是a[0]=1,以此类推 } for(i=0;i<n;i++) { if(a[i]>0)//大于0说明还没出列 { //printf("judge a[%d] is %d\n",i,a[i]); m++; if(m==M)//数到第M个人 { printf("---->person %d is out\n",a[i]); a[i]=0; //设置改变量的值为0,为0则说明人已经出列了 m=0; //重新报数 number++; //统计一共出列了多少人 if(number==n) { printf("end\n"); break;//判断所有人出列之后跳出for循环 } } } if(i==(n-1)) { i=-1;//回到队列开始的处 //注意此处不能直接置零,因为for里面还会执行一次i++ } } } int main() { loop(10,3);//test, you can test other number // printf("the result is %d\n",a); system("pause"); }
主要思路如下:设置一个长度为n的数组,然后赋予其值,其值代表其位置,然后再该队列里面报数,每次报到M值即出列并重新报数,一轮数完之后重新再队列开头。
相关推荐
在问题描述中,n个人围成一个圈,每个人都有一个唯一的编号1到n,并且有一个报数上限m。从第一个人开始顺时针报数,报到m的人出列,然后从下一个人继续报数,新的m值变为出列者的密码。这个过程一直持续到所有人都...
约瑟夫问题的基本描述如下:N个人围成一个圈,从第一个人开始顺时针报数,每数到M(M小于N)的那个人将被排除,然后从被排除人的下一个位置继续报数,直到所有人全部出列。问题的目标是找出所有人的出列顺序。 解决...
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。...
编序为1,2,...n的n个人按顺时针方向围坐一圈,选一个整数作为密码m,从...报m的人出列,从他的顺时针方向上的下一个人开始从1报数,直到报到m的人又出列,如此下去,直到所有人全部出列为止,设计一个程序求出出列顺序
约瑟夫环问题是一个经典的数学问题,描述如下:有 n 个人围成一圈,从第一个人开始报数,报到 m 的人出列,然后从出列的下一个人开始重新报数,如此循环,直到所有人都出列。问最后剩下的人是原始序列中的第几个人。...
约瑟夫环问题的基本设定是:n个人围成一个圈,每个人都有一个从1到n的编号,从某个人开始按顺时针方向报数,报到m的人退出圈子,然后从下一个人继续报数,直到所有人都退出为止。在此实验中,要求设计一个程序,能够...
在这个问题中,n个人围成一圈,每个人都有一个正整数密码,从第一个人开始按顺时针方向顺序报数,每报到m的人出局,然后从出局者的下一个人继续报数,新的m值变为出局者的密码。这个过程一直持续到所有人都出局为止...
约瑟夫问题-循环链表典型应用 n 个人围成一个圆圈,首先第 1 个人从 1 开始一个人一个人顺时针报数, 报到第 m 个人,令其出列。然后再从下一 个人开始从 1 顺时针报数,报 到第 m 个人,再令其出列,…,如此下去,...
游戏开始时选择一个正整数m作为报数上限值,从第一个人开始按顺时针方向自1开始顺序报数,当某人报到m时停止报数并出列,其密码作为新的m值,接着从他在顺时针方向的下一个人继续从1报数,直到所有人都出列为止。...
问题描述如下:n个人围成一个圈,每个人持有正整数密码,从第一个人开始顺时针报数,报到m的人退出圈子,然后从下一个人继续报数,直到所有人都退出。解决这个问题通常采用循环链表来模拟这个过程。循环链表允许我们...
- **参与者的初始状态**:编号为1至n的n个人围成一圈,每个人都持有自己的一个正整数密码。 - **游戏规则**:选择一个正整数m作为初始报数上限值。游戏开始时,从第一个人开始顺时针方向报数,报到m时停止报数,此时...
1. **初始条件**:有编号为1至n的n个人按照顺时针方向围成一圈。 2. **游戏规则**: - 选择一个正整数m作为报数上限。 - 从第一个人开始报数,每个人顺时针方向报数直到m。 - 报到m的人出列,并将其密码作为新的m...
描述中提到的问题背景是这样的:有编号从1到n的人围成一个圈,按照顺时针方向依次报数,每报到第m个人就出列,出列的人会带走他的密码。当这个人出列后,从下一个人继续报数,直到只剩下最后一个人。这个问题的关键...
问题描述为:n个人围成一圈,从第一个人开始按顺序报数,报到m的人出列,然后从下一个人继续报数,直到所有人都出列。每次出列的人的密码作为新的m值,重复这一过程。 在数据结构中,这个问题通常使用单向循环链表...
在这个问题中,人们围成一个圈,从某个人开始按顺时针方向依次报数,每次报到特定数值的人会被排除出圈,然后从下一个人继续开始报数,直到所有人全部出圈为止。在编程领域,约瑟夫环常用于考察数据结构和算法的设计...
根据题目描述,“n = 9, k = 1, m = 5” 表示一共有 9 个人围成一圈,从第 1 个人开始报数,每次报到 5 的人出列。我们需要找到所有人的出列顺序。 #### 数据结构选择 在解决约瑟夫环问题时,可以选择不同的数据...
在该问题中,n个人围成一个圈,按照顺时针方向自1开始报数,报到m的人退出圈子,然后从下一个人继续报数,直至所有人退出。最终的目标是找出所有人的退出顺序。 **基本算法分析:** 1. **数据结构选择:**解决...