蓝桥杯之字母图形详解

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

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

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

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
数据规模与约定
1 <= n, m <= 26。

看这道题目,就26个英文字母,我们申请一个数组大小的27的字符空间,存进去就行了(我这里从arry[1]开始储存,方便使用 ),(偷懒办法)。首先可以想到需要两层循环去控制输出,观察题目,每行的首字母都是有顺序,首字母在字符数组的位置就是行数。
然后观察从A开始只有第一行,其余行都是先靠近A,然后远离A,给一个中间变量,决定是靠近A还是远离,看代码吧

#include <iostream>
#include <string>
using namespace std;
int main()
{
    
    
	char arry[27];
	int i,j,k=1;
	char flag = 65;   //字符A的ascii码
	for (i = 1; i <= 26; i++)
	{
    
    
		arry[i] = flag++;       //字符数组赋值
	}
	int m, n;     //行 列 
	int num=0;              //记录输出列数
	int temp;              //记录输出首字母下标  
	cin >> m >> n;
	for (i = 1; i <= m; i++)   //控制行输出
	{
    
    
		temp = i;            //第几行首字母就是第几个字母
		k = 1;              
		num = 0;
		while (temp != 1&&num<n)    
		//第n行,首字母就输出第几个,然后慢慢靠近A,也就是下标temp--,
		//但是要保证列数的准确,假如是4行2列,temp--之后第四行应该是DCBA,
		//但我们只需要两列,所以 num<n 保证列数正确。
		{
    
    
			cout << arry[temp--];
			num++;            //记录列数
		}
		while(num<n)    //同上解法  保证列数
		{
    
    
			//上面的while循环是靠近A输出,这段代码是远离A的输出
			//下标k初始化为1,远离A就很好办,k++就好。
			cout << arry[k++];  
			num++;             //记录列数
		}
		cout << endl;
	}
}

自我认为,我写的还算详细,一个只会c/v的菜鸡,时间紧迫,就写到这里,祝大家蓝桥杯都nb!!
如果发现错误,或者更好的优化,评论私信都可!! 虚心接受一切指导。

猜你喜欢

转载自blog.csdn.net/weixin_43420303/article/details/108791323
今日推荐