三、猜字母
发布日期:2021-05-10 03:30:27 浏览次数:33 分类:精选文章

本文共 797 字,大约阅读时间需要 2 分钟。

猜字母

问题:

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

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

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

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

答案:

public class Main {    	public static void main(String[] args) {   		char[] a=new char[2015];//数组存放,多一位,从1开始存		for (int i = 0; i < 106; i++) {   //重复106			for (int j = 0; j < 19; j++) {   				a[i*19+j+1]=(char)('a'+j);//a的acs码加上J,再转成char类型,就是对应字符			}		}		int num=2014;//字母个数		while(num>1) {   			int pos=1;			for (int i = 1; i < num+1; i++) {   //只用看前面num个数,后面的无意义				if(i%2==0) {   //偶数位向前移动(即与pos位交换)					a[pos]=a[i];					pos++;//定位一定要+1				}			}			num/=2;//每一轮删掉奇数位置,字母个数减少一半		}		System.out.println(a[1]);		}}

想法:

1.由什么存储?数组
2.如何达到删掉字母的目的?偶数位由后往前移,奇数位不用管,
每一轮num后面的字母就没有用了
3.需要一个变量pos记录被替换的位置
4.达到要求的条件,即剩一个字母,就需要一个变量num记录个数

上一篇:杭电oj 1052 java实现
下一篇:杭电oj 2504 java实现

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年04月08日 19时12分20秒