递归测试走圈
import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) {
ArrayList members = new ArrayList();
for (int i = 1; i <= 20; i++) {
members.add(i);
}
print(members, 3, 0);
}
static void print(List members, int n, int m) {
int r = members.size();
if (r >= n) {
int i = 1;
int thisIndex = i * n - m - 1;
int NextIndex = -1;
while (i<=(r+m)/n) {
System.out.println(members.get(thisIndex));
members.remove(thisIndex);
NextIndex = thisIndex - 1 + n;
i++;
thisIndex = NextIndex;
}
int mo = (r+m) % n;
print(members, n, mo);
}
}
}
}
输出
引用
3
6
9
12
15
18
1
5
10
14
19
4
11
17
7
16
8
2
分享到:
相关推荐
因为问题的自相似性,即每次决策(走一步)的方式都是相同的,我们可以尝试向一个方向前进,如果遇到障碍(如卡片或边界)则回溯并尝试其他方向。为了记录路径,我们需要额外的二维数组来标记已访问过的格子,并且在...
根据正则表达式的圈复杂度来递归确定正则表达式中包含的所有闭包循环的次数,然后基于此生成测试用例。通过这种方式,可以系统地产生覆盖所有可能状态转换路径的测试用例集。 测试用例生成后,需要将它们转化为可...
该题目来源于信息学竞赛中的经典问题之一:“围圈报数”(Josephus Problem),通常用于测试选手对于数据结构的理解以及算法设计能力。题目描述了一个场景:n个人围成一个圈,从第一个人开始报数,数到第m个人则这个...
然而,圈复杂度并不是一个绝对的衡量标准,过高的圈复杂度并不一定意味着代码质量差,但通常意味着更难理解和测试。 在实际应用中,通常会设定圈复杂度的阈值,当代码的圈复杂度过高时,就需要考虑重构,以提高代码...
这个问题是经典的“约瑟夫环”(Josephus Problem)的变体,源于...这个编程挑战不仅测试了编程技能,还涉及到逻辑思维、递归与动态规划等计算机科学基础概念,对于提升编程能力和理解复杂问题的解决策略非常有帮助。
1. 栈的类定义(已实现,可参考附录:seqstack.h) ...10.应用队列完成Johnson问题(n个人围成一圈,每个人都有一个号码,从1..n,从1号报数,报到m号的出列,输出出列的号码顺序)。测试:10个人,报到3的出列。
在`__main__`部分,我们创建了一个简单的测试图像,包括两个形状:一个矩形和一个圆圈,以及一条线。然后,我们调用`obj_clip`函数,传入图像、前景色(在这里是1.0)和边界色(这里是0.5),并获取到分割结果。对于...
3. **递归求解**:递归地在左右两个部分中找到各自的最小距离点对。 4. **合并解**:找出跨越中位线的所有点对中的最近点对,并与左右两个子问题的解进行比较,选取其中最小的距离作为最终答案。 关键在于如何有效...
这个问题源自一个历史故事,讲述了在罗马围攻犹太城时,一群犹太人为了避难而形成一个圈,然后按照一定的规则逐个处决,直到剩下最后一个人为止。在编程领域,约瑟夫环问题通常被用来讨论循环移位、链表操作以及算法...
2. **创建矩阵**:根据输入创建矩形板,并在其外围添加一圈`O`作为边界。 3. **读取卡片分布**:接下来读取每行的卡片分布情况。 4. **读取待测试卡片位置**:最后读取两个待测试的卡片位置。 5. **执行递归搜索**:...
全排序、二分查找、冒泡排序、阶乘、最大公约数、最小公倍数、打印九九乘法表、判断素数、快速排序的递归实现和非递归实现、随机数、字符串操作、50人围成一圈,数到3和3的倍数的人出局,最后剩下的人是谁。...
30. 飞机加油问题:这个问题考察了算法设计和推理能力,需要设计一个使至少一架飞机绕地球一圈回到起飞时的飞机场的方法。 知识点:算法设计、推理能力 31. 汽车加油问题:这个问题考察了算法设计和推理能力,需要...
### C语言第一阶段测试题目汇总知识点解析 #### 1. 约瑟夫问题(难度:3) **问题描述:** 一伙强盗抓住了M个人,并将他们排成一个圆圈依次编号1,2,…,M-1,M。从第1个人开始依次数数,数到N的人被拉出去杀掉。下一...
在该问题中,n 个人按照顺时针方向围成一个圈,从第一个人开始依次报数,数到 m 的人将被排除出圈,然后从下一个人继续开始计数,直至只剩下一个幸存者。这个幸存者在原始顺序中的位置是问题的关键。 Python 语言...
在这个问题中,人们站成一个圈,并按顺时针或逆时针顺序报数,每次报到特定数字的人会被排除出圈,然后从下一个人继续开始报数,直到只剩下最后一个人为止。这个问题的关键在于寻找一种算法,来确定在给定人数和报数...
报告可能会结合PPT内容,提供一个完整的理解和实现过程,同时可能还有对代码的调试和性能测试的记录。 总的来说,这个课设提供了实践编程技巧、理解递归和循环算法、以及优化问题解决策略的机会。对于学习计算机...
这个问题描述如下:n个人围成一圈,从第一个人开始按顺序报数,数到m的人将被淘汰,然后从下一个人继续开始报数,直到只剩下最后一个人为止。 在"数据结构课程设计报告.doc"中,我们可以期待看到关于如何解决这个...
在该问题中,人们围成一个圈,从某个人开始按顺时针方向依次报数,每报到特定数值的人会被排除,然后从下一个人继续开始报数,直到只剩最后一个人为止。这个最后留下来的人被称为“幸存者”。 实验报告中可能详细...
问题描述: 以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的...为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。
这个问题在计算机领域被抽象为一种递归结构,用于测试和研究循环链表、队列、栈等数据结构以及递归算法。 在这个变种中,问题以C++语言为实现基础,可能涉及到了以下知识点: 1. **C++编程基础**:包括变量定义、...