本文主要是介绍Java算法试题--猜字母/杀人游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目如下:
把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
public class 猜字母 {public static void main(String[] args) {String str = "abcdefghijklmnopqrs";String str1 = "";for (int i = 0; i < 106; i++) {str1 = str1 + str;}System.out.println(str1.length());boolean[] arr = new boolean[str1.length()];for (int i = 0; i < arr.length; i++) {arr[i] = true;// 下标为TRUE时说明字母还在圈里}int leftCount = str1.length();int countNum = 0;int index = 0;while (leftCount > 1) {if (arr[index] == true) {// 当在圈里时if (countNum % 2 == 0) {// 下标为偶数时arr[index] = false;// 该字母退出圈子leftCount--;// 剩余字母数目减一}countNum++;}index++;// 每报一次数,下标加一if (index == str1.length()) {// 是循环数数,当下标大于n时,说明已经数了一圈,index = 0;// 将下标设为零重新开始。countNum = 0;}}// 打印出最后一个 for (int i = 0; i < str1.length(); i++) {if (arr[i] == true) {System.out.println(i);// 输出结果表示下标为1023(第1024个)的字母,即:q}}}
}
第二种解法:
public class 猜字母1 {public static void main(String[] args) {String str2 = "";String str = "abcdefghijklmnopqrs";for (int i = 0; i < 105; i++) {str = str + "abcdefghijklmnopqrs";}System.out.println(str.length());while (str.length() != 1) {for (int i = 0; i < str.length(); i++) {if (i % 2 == 1) {str2 += str.charAt(i);}}str = str2;str2 = "";System.out.println(str);}}
}
相对而言第二种更好理解,答案更容易找到
这篇关于Java算法试题--猜字母/杀人游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!