用C++实现:特殊字母图形打印
程序员文章站
2022-07-05 18:38:43
资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。 输入格式 输入一行,包含两 ......
资源限制
时间限制:1.0s 内存限制:256.0mb
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
abcdefg
babcdef
cbabcde
dcbabcd
edcbabc
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
abcdefg
babcdef
cbabcde
dcbabcd
edcbabc
babcdef
cbabcde
dcbabcd
edcbabc
数据规模与约定
1 <= n, m <= 26。
思路:首先观察样例图形,不难得出规律:第一行和第一列都是按照从a往后递增的顺序排列,而其他行则是从第一个字母开始递减直到a,若此时还没到m的限制大小,则再从a开始递增。所以分成3块处理:第一行,第一列,中间。
1 #include<iostream> 2 using namespace std; 3 int main(void) 4 { 5 int n, m; 6 cin >> n >> m; 7 char(*arr)[26] = new char[n][26]; 8 for (int i = 0; i < n; i++) //把每一行第一个字母初始化(第一列单列) 9 { 10 arr[i][0] = 'a' + i; 11 } 12 for (int j = 0; j < m; j++) //第一行单列 13 { 14 arr[0][j] = 'a' + j; 15 } 16 for (int i = 1; i < n; i++) //中间的字母 17 { 18 for (int j = 0; j < m;j++) 19 { 20 arr[i][j] = arr[i][0] - j; 21 if (arr[i][j] == 'a') 22 { 23 for (; j < m - 1; j++) 24 { 25 arr[i][j + 1] = arr[i][j] + 1; 26 } 27 } 28 } 29 } 30 for (int i = 0; i < n; i++) 31 { 32 for (int j = 0; j < m; j++) 33 { 34 cout << arr[i][j]; 35 } 36 cout << endl; 37 }
38 delete[]arr; 39 return 0; 40 }
注意:一定要严格控制好每个循环里面的判断条件,不要造成数组越界或没有初始化的问题。