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

题目

abcd…s共19个字母组成的序列重复拼接106 次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请编程求解该字母。
要求:使用循环或者递归实现,只需打印最后剩下的那个字母。

分析

首先题目中提到重复拼接和再(重复)删除,肯定需要用到多重循环(这里双重即可)。外层循环控制拼接字符串的数量,内层将字符串从a~s拼接一次。
然后再用双重循环删除字母,根据(下标+1)%2==0判断是否需要删除,终止条件:字符串长度为1(即只剩下一个字母)

循环代码

public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str="";//赋值为空便于后续拼接
		for(int i=0;i<106;i++) {//重复拼接106次
			for(char ch='a';ch<='s';ch++) {//a~s拼接一次
				str+=ch;
			}
			
		}
		String s;//接收删除后的字符串
		while(str.length()>1) {
			s="";//更新字符串s的状态 否则会与上一轮的结果拼接起来
			for(int i=0;i<str.length();i++) {//遍历字符串的长度,进行一轮的删除
				if((i+1)%2==0) {//如果为奇数位置
					s+=str.charAt(i);//调用String中charAt(i)方法,获取i下标的元素
				}
			}
			str=s;//str接收每一轮删除操作结束后的字符串
			
		}
		System.out.println("\n"+str);
		
	}

递归

public static void main(String[] args) {
		// TODO Auto-generated method stub

		String str="";
		for(int i=0;i<106;i++) {
			for(char ch='a';ch<='s';ch++) {
				str+=ch;
			}
		}
		System.out.print(fun(str));
	}
	public static String fun(String s) {//传入拼接好的字符串
		if(s.length()==1) {//如果只剩一个字母了就终止递归,层层返回
			return s;
		}
		String str="";//置空,否则会与上一轮的结果拼接起来
		for(int i=0;i<s.length();i++) {
			if((i+1)%2==0) {//下标+1
				str+=s.charAt(i);//获取下标i的元素
			}
		}
		return fun(str);//将每一轮删除的字符串传递下去 用s接收
	}

结果:q

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值