// B.java
public class B {
// 人的编号:1~N
public static void main(String[] args) {
exec(10, 3);
}
// N:人的数量
// num:报数时喊到即出列的数
static void exec(int N, int num) {
int b[] = new int[N];
int i = -1;
int count = 0;
while (Left(b) != 0) {
if (count == num) {
// 出列的人标记为1
b[i] = 1;
System.out.println(i + 1);
count = 0;
}
if (++i > N - 1) {
i -= N;
}
if (b[i] == 0) {
count++;
}
}
}
// 剩余未出列的人数
static int Left(int a[]) {
int count = 0;
for (int i = 0; i < a.length; i++) {
if (a[i] == 0)
count++;
}
return count;
}
}
运行结果:
3
6
9
2
7
1
8
5
10
4
分享到:
相关推荐
Josehus问题算法 设有N个人围坐一圈,现从某人开始报数, 数到M的人出列,接着从出列的下一个人重新报数,数到M的人又出列,如此下去直到所有人都出列为止,给出他们的出列次序。
编号为1到n的n个人围成一圈,每人带一个密码c,以m为报数上限。然后从第一个人开始顺时针自1开始报数,报到m的人出列,将其密码作为新的m值,从他的下一个人开始,同样顺时针自1开始报数,依次循环下去,直到所有的...
一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的人出列,将他的密码作为新的m值,从下一个人开始重新从1开始报数,如此下去,直至所有人全部出列为止。...
设有n个人围坐在一个圆桌周围,现从第s个人开始报数,数到第m的人出列,然后从出列的下一个重新开始报数,数到第m的人又出列……如此反复,直到所有的人全部出列为止。Josephus问题是:对于任意给定的n,s和m,求出...
算法题中约瑟夫环函数的一个例题,大家可以看看
编序为1,2,...n的n个人按顺时针方向围坐一圈,选一个整数作为密码m,从第一个人开始按顺时针方向从自1开始顺序报数,报到m时停止报数.报m的人出列,从他的顺时针方向上的下一个人开始从1报数,直到报到m的人又出列...
从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 例如:n = 9, k = 1, m = 5 【解答】 出局人的顺序为5, 1, 7, 4...
printf("\n\n\t\t报数出列的顺序为:"); count=1;j=0; p1=head;p2=p1; do { p2=p1->next; count=count+1; if(count%m==0) { j++; printf("\n\t j=%2d\t no=%2d",j,p2->data); p1->next=p2->...
问题描述:编号为1,2,3…,n的n个人按顺时针方向围坐一圈,每人...报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序
有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。.txt
约瑟夫环 报数出列 用循环列表实现,C语言 数据结构
约瑟夫环,,链表排序设带头结点的单链表ha和hb中结点数据域值按...报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
设有n个人围成一圈,现从第s个人开始,拨顺时针方向从1开始报数,数到d的人退出圆圈,然后从退出圆圈的下一个人重新开始报数,数到d的人又退出國圈,依此重复下去,直到最后一个人出圈为止。对于任意给定的n, s和d,...
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。
编号是1,2,……,n的n个人按照顺时针方向围坐一圈,每个人只有...报m的人出列,将他的密码作为新的m值,从他在顺时针方向的下一个人开始重新从1报数,如此下去,直到所有人全部出列为止。设计一个程序来求出出列顺序。
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2...从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
N个小孩围成一圈,给他们从1开始依次编号,现指定从第W个开始报数,报到第S个时,该小孩出列,然后从下一个小孩开始报数,仍是报到第S个出列,如此重复下去,直到所有的小孩都出列(总人数不足S个时将循环报数)。
设有N个人站成一排,从左到右的编号分别为1——N,现在从左往右报数“1,2,3,1,2,3。。。”,数到1的人出列,数到2和3的人立即站到队伍的最右端。报数过程反复进行,直到N个人都出列为止。要求给出他们出列顺序...
问题描述 编号为1,2,……,n的n个人按顺时针方向围坐一圈,...报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序。
# 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。