从网上找到一份编程练习题,我决定将里面的题目全都做一遍。
/*
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。 ?
*/
/*
分析:n人报数,使用一个长度为n的数组表示一共有n人参与报数。
初始时,数组中元素全部为1,表示全部都在圈子里。一旦退出圈子,标记为0.
当遇到数组尾端时,重新将索引值赋值为0开始重新开始报数。
肯定要使用while循环。使用变量记录count记录报的数字,
*/
class BaoShuWenTi {
public static void main(String[] args) {
baoShu(10);
}
//用数组arr[n]表示报数的n个人,数组中元素若为1表示还在圈子中,如果退出标记为0
public static void baoShu(int n){
int[] arr=new int[n];
for (int i=0; i<arr.length; i++){
arr=1;
}
int count=0; //报数
int left=n; //用来表示剩下的人
int index=0; //数组角标
while(left>1){
if (arr[index]==1){
count++;
if (count==3){
count=0;
arr[index]=0;
left--;
}
}
index++;
if (index==n){
index=0;
}
}
//这里有个小陷阱,数组的角标是从0开始的,而人数数从1开始的。
for (int i=0; i<arr.length; i++){
if (arr==1){
System.out.println("最后留下的是原来的第"+i+1+"号");
}
}
}
}
|
|