标签:
前段时间,公司同事问了一个杀人游戏感觉还是挺有意思的,对咱们程序猿来说,只要有规律,一切皆可以用代码来表示(屌丝程序猿的想法)。
题目是这样的:有1000名罪犯,对他们进行顺序编号(从1开始)。首先,法官要求偶数号的人站出来杀掉。然后在不打乱原有顺序情况下对他们进行顺序编号。再然后法官让奇数号的人站出来杀死。一次类推。问:最后一个人是原先1000人中的几号?(不要问我法官为什么要这样杀人)下面给出个人代码,不吝赐教。
int tag = 1;//第几次杀人 int num = 1000;//罪犯人数 ArrayList<String> list = new ArrayList<String>();//存放罪犯的list集合 ArrayList<String> list0 = new ArrayList<String>();//要杀掉罪犯代号,用于从list中移除 list0.add("0"); for (int i = 1; i <= num; i++) {//对罪犯进行编号 list.add(i + ""); } while (true) {//把要杀掉的人置为0 if (tag % 2 == 1) {// for (int i = 1; i <= list.size(); i++) { if (i % 2 == 0) { list.set(i - 1, 0 + ""); } } } else { for (int i = 1; i <= list.size(); i++) { if (i % 2 == 1) { list.set(i - 1, 0 + ""); } } } list.removeAll(list0);//杀掉罪犯,重新编号 tag ++;//杀人次数加1 if (list.size() == 1) {//当只剩下一个人的时候输出这个号码 System.out.print(list.get(0).toString()); return; } }
标签:
原文地址:http://my.oschina.net/u/1471093/blog/504574