首先说一种根据C语言得到的一段代码
简单的问题描述:
一个有五百个小孩拉成的圈子
然后进行报数1 2 3,每次报到三的人退出游戏,并且下一次开始重新报数
求最后留下来的小孩一开始是圈里面的第几个孩子。
public class Who {
简单的问题描述:
一个有五百个小孩拉成的圈子
然后进行报数1 2 3,每次报到三的人退出游戏,并且下一次开始重新报数
求最后留下来的小孩一开始是圈里面的第几个孩子。
public class Who {
public static void main(String[] args) {
int[] a = new int[500];//new一个放五百个小孩编号的整形数组
int k = 1, n = a.length; //定义变量 k表示报数的值 n表示圈子里面的小孩的个数
for (int i = 0; i < a.length; i++)//给数组赋初值 1 表示现在这个编号的小孩孩子圈子里面
a[i] = 1;
//开始循环报数 循环条件 只要圈子里面的小孩个数多余1个人
while (n > 1) {
for (int i = 0; i < a.length; i++) {
//判断小孩是否在圈里面
while (a[i] != 0) {
//对应小孩报数的值
a[i] = k;
//判断这个小孩是否是报的3
if (a[i] == 3) {
//如果是三 k=1 重新开始报数
k = 1;
//改变该小孩的状态 0 表示小孩不在圈里面了
a[i] = 0;
//在圈里面的小孩人数减一
n--;
} else {
//如果不是三 k 的值加一 表示一个小孩报数的值
k++;
break;
}
}
}
System.out.println();
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}
//根据小孩的状态 判断小孩是否在圈里面 输出对应的位置编号
for (int i = 0; i < a.length; i++)
if (a[i] != 0)
System.out.println ("\n"+ "最后第" + (i + 1) + "个人留下来了");
}
}
int[] a = new int[500];//new一个放五百个小孩编号的整形数组
int k = 1, n = a.length; //定义变量 k表示报数的值 n表示圈子里面的小孩的个数
for (int i = 0; i < a.length; i++)//给数组赋初值 1 表示现在这个编号的小孩孩子圈子里面
a[i] = 1;
//开始循环报数 循环条件 只要圈子里面的小孩个数多余1个人
while (n > 1) {
for (int i = 0; i < a.length; i++) {
//判断小孩是否在圈里面
while (a[i] != 0) {
//对应小孩报数的值
a[i] = k;
//判断这个小孩是否是报的3
if (a[i] == 3) {
//如果是三 k=1 重新开始报数
k = 1;
//改变该小孩的状态 0 表示小孩不在圈里面了
a[i] = 0;
//在圈里面的小孩人数减一
n--;
} else {
//如果不是三 k 的值加一 表示一个小孩报数的值
k++;
break;
}
}
}
System.out.println();
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}
System.out.println();
}
//根据小孩的状态 判断小孩是否在圈里面 输出对应的位置编号
for (int i = 0; i < a.length; i++)
if (a[i] != 0)
System.out.println ("\n"+ "最后第" + (i + 1) + "个人留下来了");
}
}