目录
1.题目
2.解题思路
3.源代码
1.问题描述
FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?
输入格式
仅有一个数:N ≤ 26。
输出格式
请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA
2.解题思路:
找规律,不妨先找数量,字母种类,排序,对称等特点
An | 字母个数 | 字母种类 |
A1 | 1=2^1-1 | 1 |
A2 | 3=2^2-1 | 2 |
A3 | 7=2^3-1 | 3 |
A4 | 15=2^4-1 | 4 |
由此易推
A5 | 31=2^5-1 | 5 |
... | ... | ... |
An | 2^n-1 | n |
再观察得一个十分重要的性质---对称性
①任何一个字符串都具有对称性。
②中心字母是ASCLL码最大的那一个,中心字母又与An的n有关。
③每一个字符串都是由上一个字符串组成前半部分,再加上中心字母,再将上一个字符串倒序拼接而成。
该性质我们可以利用递归可实现。
万千解法,自己探索吧!
3.源代码
#include<stdio.h>
#include<string.h>
int i , j;
char str[500];
int n;
void fact(int k)
{
i = strlen(str);
str[i] = 'A' +k;
i++;
for (j = strlen(str) - 2; j >= 0; i++, j--)
{
str[i] = str[j];
}
if (k == n-1)
return;
else
return fact(k+1);
}
int main()
{
scanf("%d", &n);
str[0] = 'A';
if (n == 1)
printf("%c", str[0]);
else
{
fact(1);
puts(str);
}
return 0;
}