[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);

你可能感兴趣的:(蓝桥杯)