- /*
- * 有50个人站成一个圈,
- * 第一个人开始数数(从1开始),每数到3或者3的倍数此人就退出
- * 最后剩下的人是多少号?(编程实现)
- */
- public class tai {
- public void test(){
- //定义数组并编号
- int[] array = new int[50];
- for (int i = 0; i < array.length; i++) {
- array[i] = i+1;
- }
- //当前数数人的编号
- int id = 0;
- //当前要数的数字
- int number = 1;
- //数组中值为0的元素个数
- int count = 0;
- for(;;){
- if(number%3==0){
- array[id]=0;
- count ++;
- if(count==array.length-1){
- break;
- }
- }
- number++;
- while(true){
- if(id < array.length-1){
- id++;
- }else{
- id = 0;
- }
- if(array[id]!=0)break;
- }
- }
- for (int i = 0; i < array.length; i++) {
- if(array[i]!=0){
- System.out.println("最终留下的会是第"+array[i]+"个人");
- }
- }
- }
- public static void main(String[] args) {
- new tai().test();
- }
- }
- //注:本解法的原理:
- //一数组,大小为50,元素从1到50排列。数数后,每数到3的倍数,数数者的值变为0.
- //下一轮数数时,值为0的元素将不能参与数数。当值为0的元素的个数为49时,游戏结束。