【蓝桥杯】 基础练习 字母图形

版权声明:本文为博主原创文章,转载请注明出处-- https://blog.csdn.net/qq_38790716/article/details/88380340

问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:

A B C D E F G ABCDEFG

B A B C D E F BABCDEF

C B A B C D E CBABCDE

D C B A B C D DCBABCD

E D C B A B C EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个 n n m m 列的图形。

输入格式
输入一行,包含两个整数 n n m m ,分别表示你要输出的图形的行数的列数。
输出格式
输出 n n 行,每个 m m 个字符,为你的图形。
样例输入 5 7
样例输出
A B C D E F G ABCDEFG
B A B C D E F BABCDEF
C B A B C D E CBABCDE
D C B A B C D DCBABCD
E D C B A B C EDCBABC
数据规模与约定
1 <= 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;
}

猜你喜欢

转载自blog.csdn.net/qq_38790716/article/details/88380340