2014第五届蓝桥杯JAVA本科B组_猜字母
1 /* 2 把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。 3 接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。 4 得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。 5 答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。 6 */
7 public class Main { 8 public static void main(String[] args) { 9 String s = "abcdefghijklmnopqrs"; 10 String str = ""; 11 for (int i = 0; i < 106; i++) { 12 str += s; //重复拼接 13 } 14 System.out.println(str.length()); 15 boolean arr[] = new boolean[str.length()]; 16 for (int i = 0; i < arr.length; i++) { 17 arr[i] = true; //标记字母是否已删除(false为删除) 18 } 19 int i = 0; //旧串(一直是str)的下标 20 int countNum = 0; //新串的下标 21 int leftNum = str.length(); //删除后剩下的字母数 22 23 while (leftNum > 1) { //题目描述最后只剩下一个字母 24 if (arr[i] == true) { //如果字母未被删除 25 if (countNum % 2 == 0) { //如果新串的下标为偶数 26 arr[i] = false; //删除该字母 27 leftNum--; //剩下的字母数-1 28 } 29 countNum++; //遍历新串(未被删除的字母构成的串) 30 } 31 i++; //遍历旧串(一直是str) 32 33 if (i == str.length()) { //如果遍历完一遍,(题目描述得到的新串再进行删除奇数位置字母的动作),循环删除 34 countNum = 0; //设为0重新开始 35 i = 0; 36 } 37 } 38 for (int j = 0; j < arr.length; j++) { 39 if (arr[j] == true) { 40 System.out.println(str.charAt(j)); 41 } 42 } 43 } 44 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。