黑马程序员技术交流社区
标题:
两种方式实现围圈报数退场游戏
[打印本页]
作者:
老衲玩IT
时间:
2013-8-27 09:00
标题:
两种方式实现围圈报数退场游戏
package com.itheima;
import java.util.ArrayList;
/**
* 有100个人围成一个圈,从1开始报数,报到14的这个人就要退出。
* 然后其他人重新开始,从1报数,到14退出。问:最后剩下的是100人中的第几个人?
* @author Administrator
*
*/
public class Test10 {
public static void main(String[] args) {
//使用基本数据类型数组存储
circle();
//使用动态数组存储
circleList();
}
public static void circle(){
//二维数组表示100个人的编号和状态0表示出局,1表示在场
int[][] men=new int[100][1];
/////////初始化数组,所有人标记为在场///////////////////////
for (int i = 0; i < men.length; i++) {
men[i][0]=1;
}
/////////初始化数组,所有人标记为在场///////////////////////
boolean flag=true;
//报数
int num=0;
//记录出局者数量
int outs=0;
while (flag) {
//////////判定是如果在场,进行报数,报到14,标记0状态出局,重置报数//////////////////////
for (int i = 0; i < men.length; i++) {
if (men[i][0]==1) {
if (++num==14) {
men[i][0]=0;
num=0;
outs++;
}
}
}
//////////判定是如果在场,进行报数,报到14,标记0状态出局,重置报数//////////////////////
//////////判断在场人数是否小于14结束报数,是则停止报数/////////
if (100-outs<14) {
flag=false;
}
//////////判断在场人数是否小于14结束报数,是则停止报数/////////
}
//输出剩余在场者的标号
for (int i = 0; i < men.length; i++) {
if (men[i][0]==1) {
System.out.println("alive:"+(i+1));
}
}
}
public static void circleList(){
ArrayList<Man> circle=new ArrayList<Man>();
for (int i = 0; i < 100; i++) {
circle.add(new Man(i+1,false));
}
int outs=0;
boolean flag=true;
int num = 0;
while (flag) {
for (int i = 0; i < circle.size(); i++) {
if (!circle.get(i).isOut()) {
if (++num == 14) {
circle.get(i).setOut(true);
outs++;
num = 0;
}
}
}
if (100-outs<14) {
flag=false;
}
}
for(Man man : circle){
if (!man.isOut()) {
System.out.println(man);
}
}
}
}
class Man{
private int num;
private boolean isOut;
public Man(int num, boolean isOut) {
this.num = num;
this.isOut = isOut;
}
public boolean isOut() {
return isOut;
}
public void setOut(boolean isOut) {
this.isOut = isOut;
}
public int getNum() {
return num;
}
@Override
public String toString() {
return "Man [num=" + num + ", isOut=" + isOut + "]";
}
}
复制代码
本人测试过两种方式的用时,用bean和动态数组所消耗的时间是用基本类型数组耗时的两倍,太史公日:便利是有代价的。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2