【蓝桥杯】2014年第五届蓝桥杯省赛真题-Java语言B组-3-(C++C组题3)猜字母

标题:猜字母

把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。

接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。

得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。

答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。

答案:q

分析:
首先利用循环拼接得到长度为2014的字符数组。
接着使用双重循环,多次对数组进行字母删除行为(往前覆盖),循环跳出的条件是数组中只剩下一个字母。
由于数组每次都要删除一半左右的字母,可以定义一个变量k,每次前进一步,用来记录要保留的字母的位置。定义一个变量i,每次前进两步,该位置的字母要被保留的,需要往前覆盖。

代码:

public class Main {

	public static void main(String[] args) {
		char [] a = new char[2014];
		for (int i = 0; i < 106; i++) {
			for (int j = 0; j < 19; j++) {
				a[j + i*19] =(char) (97 + j);
			}
		}

		int len = 2014;
		while(len != 1) {
			int k = 0;
			for (int i = 1; i < len; i+=2) {
				a[k++] = a[i];
			}
			len = k;
		}
		System.out.println(a[0]);
	}

}

while循环里面的代码有一种等价的写法:

		    int k=0;
			for (int i=0;i < len; i++){
				if (i%2==1)
					a[k++]=a[i];
			}
			len = k;

猜你喜欢

转载自blog.csdn.net/allyyhh/article/details/88579185