[VIP试题] 蓝桥杯 BASIC-22 FJ的字符串

问题描述
  FJ在沙盘上写了这样一些字符串:
  A1 = “A”
  A2 = “ABA”
  A3 = “ABACABA”
  A4 = “ABACABADABACABA”
  … …
  你能找出其中的规律并写所有的数列AN吗?
输入格式
  仅有一个数:N ≤ 26。
输出格式
  请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA

思路:

 这道题考的是递归,发现每次的字符串都与上一个字符串有关系,是上一个字符串形成的对称字符串,中间的这个字母是‘A’+n-1.关键在这个ASCII码与实际字母的转化。
C++代码如下:

#include<iostream>
#include<string>
using namespace std;
//写一个返回字符串类型的函数 
string f(int n){
	//递归出口 
	if(n==1){
		return "A";
	}
	//其他则是与上一个字符串相关对称 
	return f(n-1)+char('A'+n-1)+f(n-1);
}
int main(){
	int n;
	cin>>n;
	cout<<f(n)<<endl;
	return 0;
} 

C语言代码如下:

#include<stdio.h>
void f(int n){
	if(n){
		//先打印出左半部分
		f(n-1);
		//输出中间字母
		putchar('A'+n-1);
		//打印右半部分 
		f(n-1);	
	}
}
int main(){
	int n;
	scanf("%d",&n);
	f(n);
	putchar('\n');
	return 0;
} 

 不同于C++的是,这里没有选择返回字符串,而是直接返回打印结果。putchar()函数一次只能输出一个字符,当然这里也可以换成

	printf("%c",'A'+n-1);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值