问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:A B C D E F G ABCDEFG ABCDEFG
B A B C D E F BABCDEF BABCDEF
C B A B C D E CBABCDE CBABCDE
D C B A B C D DCBABCD DCBABCD
E D C B A B C EDCBABC EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个 n n n行 m m m列的图形。
输入格式
输入一行,包含两个整数 n n n和 m m m,分别表示你要输出的图形的行数的列数。
输出格式
输出 n n n行,每个 m m m个字符,为你的图形。
样例输入 5 7
样例输出
A B C D E F G ABCDEFG ABCDEFG
B A B C D E F BABCDEF BABCDEF
C B A B C D E CBABCDE CBABCDE
D C B A B C D DCBABCD DCBABCD
E D C B A B C EDCBABC EDCBABC
数据规模与约定
1 <= n , m n, m n,m <= 26
个人思路:第一眼看到这个序列时,就想着这不就是在第一个字符前插入一个字符,然后把末尾字符删掉得到下一个状态,然后代码也就这样实现的,可能会有点复杂。
#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
int n,m;
cin >> n >> m;
string s = "";
//得到初始状态
for (int i = 0;i < m; ++i)
{
s += i + 'A';
}
int len = s.length();
string str = "";
//得到插入字符序列
for (int i = 0;i < 26; ++i)
{
str += i + 'A';
}
int k = 1;
for (int i = 0;i < n; ++i)
{
cout << s << endl;
s.insert(s.begin(), str[k]); //在第一个字符前插入一个字符
s.erase(len, 1); //删除末尾字符
k++;
if (k == str.length())
{
k = 0;
}
}
return 0;
}