你好呀,我是灰小猿,一個超會寫bug的程式猿!
歡迎大家關注我的專欄“每日藍橋”,該專欄的主要作用是和大家分享近幾年藍橋杯省賽及決賽等真題,決議其中存在的演算法思想、資料結構等內容,幫助大家學習到更多的知識和技術!
題目標題:列印十字圖
小明為某機構設計了一個十字形的徽標,(并非紅十字會啊),如下所示:
對方同時也需要在電腦dos視窗中以字符形式輸出該標志,并能任意控制層數,
為了能準確的對比空白的數量,程式要求對行中空白以句點(.)代替
輸入格式:一個正整數 n(n<30)表示要求列印的圖形的層數
輸出:
對應包圍層數的該標志
如:用戶輸入:
1
程式應該輸出:
再如:用戶輸入
3
程式應該輸出:
請仔細觀察樣例,尤其要注意句點的數量和輸出位置
資源約定:
峰值記憶體消耗 < 64MCPU消耗 < 1000ms
請嚴格按照要求輸出,不要畫蛇添足的列印類似:“請您輸入...”的多余內容,
所有代碼都放在同一個源檔案中,測驗通過后,拷貝提交該原始碼,
注意:main函式需要回傳0
注意:只使用ANSI C/ANSI C++ 標準,不要呼叫依賴于編譯環境或作業系統的特殊函式
注意:所有依賴的函式必須明確的在源檔案中,#include<xxx> 不能通過工程設定而忽略常用頭檔案
提交時,注意選擇所期望的編譯器型別
解題思路:
本題的重點是要仔細觀察每一層圖形所具有的特征,然后推斷出每一行存在的規律,
在這道題中的思路是:首先找到每一行列印的規律,然后先能夠將每一層圖形單獨列印出來,然后利用二維陣列,將每一層中“$”符的位置記錄在二維陣列中,最后整個二維陣列存放的就是整個圖形的資料,然后將二維陣列輸出即可,
答案原始碼:
package 一三年省賽真題; import java.util.Scanner; public class Year2013_t8 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int m = scanner.nextInt(); drawAll(m); } /** * 繪制整個圖形 * @param m 圖形共有多少層 * */ public static void drawAll(int m) { int row = 5+4*m; int list = 5+4*m; String[][] drawArr = new String[row][list]; //建立存放該圖形的二維陣列 for (int i = 0; i <= m; i++) { drawN(m, i, drawArr); } //將圖形輸出 for (int i = 0; i < drawArr.length; i++) { for (int j = 0; j < drawArr.length; j++) { if (drawArr[i][j]!="$") { drawArr[i][j] = "."; } System.out.print(drawArr[i][j]); } System.out.println(); } } /** * 畫第n層圖形 * @param m 圖形的總層數 * @param n 當前繪制的層數 * @param drawArr 存放圖形的二維陣列 * */ public static void drawN(int m,int n,String[][] drawArr) { int r = 2*(m-n); //確定該層圖形的起始橫縱坐標 int width = 5 + 4*n; //獲取該層圖形的最大寬度 int height = 5 + 4*n; //獲取該層圖形的最大高度 //繪制第一行和倒數第一行 for (int i = 2; i < height-2; i++) { drawArr[r+0][r+i] = "$"; drawArr[r+height-1][r+i] = "$"; } //繪制第二行和倒數第二行 drawArr[r+1][r+2] = "$"; drawArr[r+1][r+width-3] = "$"; drawArr[r+height-2][r+2] = "$"; drawArr[r+height-2][r+width-3] = "$"; //繪制第三行和倒數第三行 for (int i = 0; i < 3; i++) { drawArr[r+2][r+i] = "$"; drawArr[r+2][r+width-1-i] = "$"; drawArr[r+height-3][r+i] = "$"; drawArr[r+height-3][r+width-1-i] = "$"; } //繪制第四到倒數第四行 for (int i = 3; i < height-3; i++) { drawArr[r+i][r+0] = "$"; drawArr[r+i][r+width-1] = "$"; } } }
輸出樣例:
其中有不足或者改進的地方,還希望小伙伴留言提出,一起學習!
感興趣的小伙伴可以關注專欄!
灰小猿陪你一起進步!
最后,我正在參加2020年度博客之星的評選,求小伙伴們幫忙投票支持一下喲!
投票鏈接:https://bss.csdn.net/m/topic/blog_star2020/detail?username=weixin_44985880

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250674.html
標籤:java




