蓝桥杯 之 基础练习3:字母图形

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

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

输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。

样例输入
5 7
样例输出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

数据规模与约定
1 <= n, m <= 26。
*/

心得:

  一直以来作各种算法题,图形输出题貌似一直都是我的弱项,做这道题的时候也着实费了我好大劲。一开始没有好好注意观察图形的规律,导致做题时很伤脑筋。做这种图形输出题做多了些,就会发现做这类题就得要看图找规律,根据规律来写代码。像这道题的规律,它的第一行是按ABCDEFG..的顺序展开,第一列也是这样。而第i行的第i位后自左向右的字母也是按ABCDEF...展开的(i=1,2...,26),而第i行第i位前自右向左也是按ABCDEF...展开的。根据这个规律就可以写代码了。

  另外,在这道题中,我第一次在蓝桥杯练习系统上提交的代码,是将char二维数组的数组长度取决于我输入的两个数字,我在eclipse运行是可以运行成功的,但是在练习系统上提交代码后是显示运行错误。前几次在刷蓝桥杯练习系统的题目时,涉及到数组问题时也会出现这个问题,几番试验后我便发现,因为题目中有规定数据规模和约定,所以涉及到数组长度时,应该以题目中所给的数据规模与约定为准。

 1 import java.util.Scanner;
 2 public class Main{
 3     public static void main(String[] args){
 4         Scanner sc=new Scanner(System.in);
 5         int n=sc.nextInt();
 6         int m=sc.nextInt();
 7         char str;
 8         //char[][] pattern=new char[n][m];      //会出现运行错误
 9         char[][] pattern=new char[26][26];
10         int i=0,j=0;
11         for(i = 0;i < n;i++)  
12         {  
13             str = 'A';    
14             for(j = i;j  < m;j++)        //此处两个循环用来控制存储字符的  
15             {  
16                 pattern[i][j] = str++;  
17             }    
18             str = 'A';  
19             for(j = i - 1;j >= 0;j --)  
20             {  
21                 pattern[i][j] = ++str;
22             }
23         }  
24       
25         for(i = 0;i < n;i ++)    //此处用来输出字符数组元素  
26         {  
27             for(j = 0;j < m;j ++)  
28             {  
29               System.out.print(pattern[i][j]);  
30             }  
31           System.out.println("");
32         }    
33     }
34 }
原文地址:https://www.cnblogs.com/beckljm/p/4253545.html