#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值即出列并重新报数,一轮数完之后重新再队列开头。
相关推荐
然后从第一个人开始顺时针自1开始报数,报到m的人出列,将其密码作为新的m值,从他的下一个人开始,同样顺时针自1开始报数,依次循环下去,直到所有的人都出列!要求得到依次出列的那些人的编号序列! 基本要求: 用...
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。...
//约瑟夫问题描述:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的人的序号为5,4,6,2,3。最后剩下1号。
简单的约瑟夫环代码约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个...
Josehus问题算法 设有N个人围坐一圈,现从某人开始报数, 数到M的人出列,接着从出列的下一个人重新报数,数到M的人又出列,如此下去直到所有人都出列为止,给出他们的出列次序。
一开始任选一个正整数作为报数的上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止。报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部...
约瑟夫问题:N个人围成一圈,从第一个人开始报数,数到M的人出圈;再由下一个人重新开始报数,数到M的人出圈;…输出依次出圈的人的编号。N,M由键盘输入。
约瑟夫环问题,用循环链表实现,最后输出胜利者
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。 分析: (1)由于对于每个人只有死和活两种...
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3。
约瑟夫环问题(C代码,可直接运行) 设编号为1-n的n(n>0)个人按顺时针方向围成一圈....然后再从他的下一个人开始,重新从1顺时针报数,报m的人,再令其出列。如此下去,直到圈中所有人出列为止。求出列编号序列口。
编序为1,2,...n的n个人按顺时针方向围坐一圈,选一个整数作为密码m,从第一个人开始按顺时针方向从自1开始顺序报数,报到m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始从1报数,直到报到m的人又出列...
从第一个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。
设有n个人围成一圈,现从第s个人开始,拨顺时针方向从1开始报数,数到d的人退出圆圈,然后从退出圆圈的下一个人重新开始报数,数到d的人又退出國圈,依此重复下去,直到最后一个人出圈为止。对于任意给定的n, s和d,...
数据结构中的约瑟夫环问题,用c++实现的。有n个人围成一圈,从第k个人开始报数,报到m的人退出,下一个人重新开始报数。
一开始任选一个正整数作为报数上限值m,从第一个仍开始顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部...
用数组实现约瑟夫出圈问题。 n个人排成一圈,从第一个人开始报数,从1开始报,报到m的人出圈,剩下的人继续开始从1报数,直到所有的人都出圈为止。对于给定的n,m,编写程序求出所有人的出圈顺序。
开始时任选一个正整数作为报数上限值m,从第一个人开始顺时针方向自1起顺序报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人起重新从1报数.如此下去,直到所有人全部出列为止.令...
约瑟夫环约瑟夫环约瑟夫环约瑟夫环约瑟夫环