本帖最后由 L10052108 于 2016-11-12 15:00 编辑
我写这帖子主要是觉得这个程序,很有意思很多人都玩过这样的游戏,大家排队围成一个圈,开始报数,谁报道某一个数字,就出局。下一个人从头开始报数,报道最后一个人的时候,第一个人开始接着报数,循环起来。
这也是我做过的一道题
下面说说我的思路:我觉得,这道题用集合思想实现比较的好,尤其是使用Arraylist集合,因为集合是有序的。向集合中插入100个数字,代表这100个,每一个人需要报数用cont 表示,位置用index表示,如果报一次数字(count++),报数人也就变成Index++;如果这个人报数是14,让这个人出局,只需要移除对应的index,即可。由于集合特点移除以后,后面人的序号自动减一,为了保证序号正确,index子减。到了最后一个元素,第一个元素接上。循环下去,就可以知道,最后剩下的人是谁了?
代码实现:
[AppleScript] 纯文本查看 复制代码 package com.itheima;
import java.util.ArrayList;
/**
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
*
* 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
*
* @author liuwei
*
*/
/*
* 分析: 使用arrayList集合比较方便,arraylist 是有序的,可以通过序号的判断,来判断是不是需要退出;
*/
public class Test10 {
public static void main(String[] args) {
// 创建 集合对象
ArrayList<Integer> arr = new ArrayList<Integer>();
// 向集合中添加元素
for (int x = 1; x <= 100; x++) {
arr.add(x);
}
// 用于记录报数的
int count = 0;
// 用于记录报数到哪一个人的
int index = -1;
// 用于记录退出人数的
int removeTime = 0;
while (true) {
count++;
index++;
if (count >= 14) {
count = 0;
// 控制台输出移除的数字
// System.out.println(arr.get(index));
arr.remove(index);
// 移除以后,后面的元素自动进位,此时的索引的位置应该 -1
index--;
// 记录移除的次数
removeTime++;
}
if (index >= (arr.size() - 1)) {
index = 0;
}
if (removeTime >= 99) {
break;
}
}
// System.out.println("---------------");
// 经过 99 次移除以后,集合中现在只剩下一个元素,也就是想要的元素
System.out.println(arr.get(0));
}
}
这是我自己做的,可能个别地方有错误,仅供参考,如果发现错误,还希望帮我指出,大家一起学习。
我看到论坛内还有其他同学发的帖子;
觉得不错的,我把链接发了一下
http://bbs.itheima.com/forum.php ... 6%E7%91%9F%E5%A4%AB
http://bbs.itheima.com/forum.php ... 6%E7%91%9F%E5%A4%AB
http://bbs.itheima.com/forum.php ... 6%E7%91%9F%E5%A4%AB
自己多看看论坛,长见识呀
|