-
问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
输入格式
仅有一个数:N ≤ 26。
输出格式
请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。样例输入
3
样例输出
ABACABA
2.思路:观察得当N等于1时A1=“A”,当N不等于1时AN="A(N-1)(‘A’+N-1)A(N-1)"此时要利用ASCLL码表字符与数字一一对应的特性解决出现新字母的问题。两个字符串a,b且a=b=A(N-1),将每次新出现的字母放在a的末尾,再将a,b连起来放在b中,最后把b拷给a,循环N-1次。
- 代码(c语言)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[])
{
int i,N,l;
char a[10000],b[1000],c;
scanf("%d",&N);
a[0]='A';
b[0]='A';
if(N==1)
printf("%c",a[0]);
else
{
for(i=0;i<N-1;i++)//排除了N==1,循环N-1次
{
c='A'+i+1;//处理N每次增加出现的新字母
l=strlen(b);//计算字符串b的长度
b[l]=c;//将每次新出现的字母放在字符串b的最后
strcat(b,a);//连接字符串a,b放在b中
strcpy(a,b); //将字符串b拷给a,为下一次循环准备
}
}
printf("%s",b);
return 0;
}
代码(c++)
#include <iostream>
#include <string>
using namespace std;
int main()
{
string s="A",s1;
int n;
cin>>n;
for(int i=1;i<n;i++)
{
s1='A'+i;
s=s+s1+s;
}
cout<<s;
}