魔兽世界装备对比:java编程序实现约瑟夫环

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 22:53:43

精简易懂版本 刚写的
public class Yuesefu {

// 数三退一 约瑟夫环 求最后留在环中小朋友的位置 即原来的编号(1-500)
/**
* 初始化数组,添加标号
*/
private void markID(int[] child) {
for (int i = 0; i <= child.length - 1; i++) {
child[i] = i + 1;
}
}

/**
* 求出小孩子原来的位置在什么地方,从一开始
*/
public void re_index(int[] i) {
for (int ii : i) {
if (ii > 0) {
System.out.println("还在场内的小朋友的序号为 : " + ii);
}
}

}

/**
* 统计剩余的同学
*/
public int record(int[] re) {
int reco = 0;
for (int i : re) {
if (i > 0) {
reco = reco + 1;
} else {
continue;
}
}
// System.out.println("目前还剩下:" + reco + " 个小朋友在圈圈里面");
System.out.println("程序努力加载计算中.............................................................................................." + reco);
return reco;
}

public static void run() {
int childs[] = new int[500];
Yuesefu yuesefu = new Yuesefu();
yuesefu.markID(childs);
yuesefu.startGame(childs);
yuesefu.re_index(childs);
}

/**
* 游戏开始
*/
private void startGame(int[] i) {
int index = 0; // 用作循环
int leave = 0; // 用作离场
while (true) {
if (i[index] != 0) {// 还在场内
leave = leave + 1; // 报数

if (leave == 3) {// 判断是否需要离场 需要
i[index] = 0; // 离场
leave = 0;// 重新报数
}

index = index + 1;// 下一个人预备
if (index == i.length) {// 已经到最后了 需重新循环
index = 0;
}

} else {// 不在场内

if (index == i.length - 1) {// 判断此出场的人是否为最后一个人
index = 0;
}
index = index + 1;// 跳过
}

int x = new Yuesefu().record(i);// 统计剩余人数
if (x == 1)

break;
}

}

public static void main(String[] args) {
// TODO Auto-generated method stub
run();
}

}

什么意思