问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
输入格式
仅有一个数:N ≤ 26。
输出格式
请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA
解题过程
一开始发现:A1=“A”
A2="A1 B A1"
A3="A2 C A2"
A4="A3 D A3"
……
An="An-1 Z An-1 (n<=26)
当时第一反应是用递归,但后来发现复杂了。考虑用复制+字符串链接的方式(因为左右对称)。
附上代码
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
int main()
{
void AN(int);
int n;
cin >> n;
AN(n);
return 0;
}
void AN(int n)
{
if (n == 1)
{
cout << 'A' << endl;
return;
}
else
{
string c = "A";
string c2;
for (int i = 2; i <= n; i++)
{
string c1;
char cc = 64 + i;
c1 = c1 + cc;
c2 = c;
c = c + c1;
c = c + c2;
}
cout << c << endl;
}
return;
}
----------------2019.2.9 更新------------
后来在别的博客上看到用递归的,才发现是自己没能力弄出来(难受)。
附上自己仿写的代码:
#include<iostream>
using namespace std;
int main()
{
void findAn(int);
int n;
cin>>n;
findAn(n);
return 0;
}
void findAn(int n)
{
if(n==1)
{
cout<<'A';
return;
}
findAn(n-1);
cout<<char(64+n);
findAn(n-1);
}