欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

用C++实现:特殊字母图形打印

程序员文章站 2022-04-19 10:03:40
资源限制 时间限制: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
数据规模与约定
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 }

 

注意:一定要严格控制好每个循环里面的判断条件,不要造成数组越界或没有初始化的问题。