幸运者问题 20

幸运者问题

需求分析

现在有100个人犯人,每个人的编号是1,2,…100.国王准备赦免一个人,赦免的规则:先干掉奇数位置的人。剩下的人从新保留队列,继续干掉奇数位置的人。 直到最终剩下一个人为止,此人即是幸运者,请算出他的编号。

分析步骤

a、定义一个数组存储100个人的编号。
b、定义一个死循环,去掉奇数位置的人。
c、把非奇数位置的人的编号从新存入到新的数组中去。
d、新数组重复上述过程,直到剩下一个人为止即是幸运者。

public class LuckyNumDemo {
    public static void main(String[] args) {
        // 1、定义一个数组存储100个人的编号。
        int[] peoples = new int[100];
        // 2、存入100个人的编号进去。
        for(int i = 0 ; i < peoples.length ; i++ ) {
            peoples[i] = i+1;
        }
        System.out.println("数组内容:"+ Arrays.toString(peoples)); // --Java提供的而技术,了解会用就好!
        // 3、定义一个死循环,去掉奇数位置的人。
        while(true){
            // 4、定义一个新数组存储本轮幸存者,本轮幸存者人数一定是数组长度/2
            int[] lastPeoples = new int[peoples.length / 2];
            // 5、遍历出原数组的偶数位置的人存入到新数组即可。
            int index = 0 ; // 记录索引
            for(int i = 1 ; i < peoples.length ; i+=2 ) {
                // peoples[i]
                lastPeoples[index++]  = peoples[i];
            }
            // 6、本轮幸存者
            System.out.println("本轮幸存者:"+Arrays.toString(lastPeoples));
            // 7、判断幸存者是否只有一位了,就结束循环
            if(lastPeoples.length == 1) break;
            // 8、把新的数组地址替换老数组地址从新进行一样的筛选
            peoples = lastPeoples;
        }

    }
}
发布了34 篇原创文章 · 获赞 16 · 访问量 284

猜你喜欢

转载自blog.csdn.net/qq_41005604/article/details/105201364
20)
$20
20