问题描述
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);