/*
問題描述
利用字母可以組成一些美麗的圖形,下面給出了一個例子:
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 }