/*
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
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 }