问题:15只股票选出一只,依次1-7循环报数,报到7的被淘汰,直到最后一只为大王。
知识点:循环
思路:每只都设为true 1,然后循环报数,到7时变成false 0,下次循环跳过false的那一只,直到true的数量=1时结束循环。输出true的那个的索引值即可。
public class 循环报数选大王 {
//m个猴子,依次1-n报数,报道n的淘汰,直到最后一只,选为大王;
//每个设为1,然后循环报数,到n时编程0,下次循环跳过0的位置,直到1的数量只有1个时结束,输出1的那个索引
public static int searchOne(int[] arr,int n){
for (int i = 0; i <arr.length ; i++) {
arr[i] = 1;
}
int count=0;
int trueArr = arr.length;
while (trueArr != 1){
for (int i = 0; i <arr.length ; i++) {
if(arr[i] == 0){
continue;
}
count++;
if(count%n==0){
arr[i]=0;
trueArr--;
}
}
}
int index = 0;
for (int i = 0; i <arr.length ; i++) {
System.out.print(arr[i]+"\t");
if(arr[i]==1) index = i+1;
}
return index;
}
public static void main(String[] args) {
int[] arr = new int[15];
System.out.println("第"+searchOne(arr,7)+"是大王");
}
}
输出结果:
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 第5是大王