// 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
分享到:
相关推荐
约瑟夫问题的基本描述如下:N个人围成一个圈,从第一个人开始顺时针报数,每数到M(M小于N)的那个人将被排除,然后从被排除人的下一个位置继续报数,直到所有人全部出列。问题的目标是找出所有人的出列顺序。 解决...
在问题描述中,n个人围成一个圈,每个人都有一个唯一的编号1到n,并且有一个报数上限m。从第一个人开始顺时针报数,报到m的人出列,然后从下一个人继续报数,新的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报数,如此下去,直至所有人全部出列为止。试设计一个程序求出出列顺序
报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一人开始重新从1报数,如此下去,直到所有人全部出列为止。 建立n个人的单循环链表存储结构,运行结束后,输出依次出队的人的序号。
有N个人围成一环形圈,第一个人从1开始报数,报道M的人出列,直到最后一个同学,请写出算法。.txt
设有n个人围成一圈,现从第s个人开始,拨顺时针方向从1开始报数,数到d的人退出圆圈,然后从退出圆圈的下一个人重新开始报数,数到d的人又退出國圈,依此重复下去,直到最后一个人出圈为止。对于任意给定的n, s和d,...
编号是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个人都出列为止。要求给出他们出列顺序...
# 题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
1. 本演示程序中,人数n应为任意的,首先应输入一个值赋给初始报数上限m,程序应能自动保存出列人的序号和将出列的人所持的密码赋给m,再次作为报数上限,如此循环,直至所有人都出列为止。 2. 演示程序以用户和...
问题设定是这样的:有n个人围坐在一个圆形的桌子旁,从第s个人开始计数,每数到第m个人就会被剔除,然后从剔除者的下一个人继续计数,直到所有人都被剔除。问题的关键在于找出按照剔除顺序排列的所有人的序列。 以n...
描述 "m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。到最后只余1人,输出最后留下的是第几号(最初的序号,以1起始)" 描述了一个经典的算法问题,通常被...
C语言 链表实例:船上30人围成一圈轮流依次报数,报到9的人跳船,求安全位置。