山東科技大學 OJPrint Graphics Problerm (IV) (Append Code)
阿新 • • 發佈:2019-01-14
對於這種輸出菱形樣式的圖形我在這裡為大家總結了一點簡單方法,這需要一點點抽象思維,但也不是很難的哦,大家不要害怕,請聽小鑫娓娓道來。
首先我們要了解編譯器輸出格式以及C語言程式碼的整體趨向性,編譯器輸出格式是以行輸出標準的,C語言程式碼一般是以正向發展為主要趨勢的,讓我們看樣例輸出格式,一個空心的菱形,在我們之前所接觸的輸出圖形樣式都是實菱形為主,這種空心圖形沒有過多接觸,但也不是沒有辦法的,掌握每一行的輸出技巧,暴力解法是可以解出來的,但是程式碼量過於龐大,小鑫比較懶不想寫這麼多程式碼,於是我就想出來一種新方法:將輸出圖形二維化,想象成二維笛卡爾座標系,但也不是一般的笛卡爾座標系,這個座標的縱座標是向下指的。下面我用一個圖來解釋一下吧:
圍成菱形的四條線大家應該很容易就猜出來就是| X | + | Y | = N(N為輸入的數)
說這麼不如程式碼來得痛快,直接上程式碼:
#include<stdio.h> #include<stdlib.h> int print_graphic(int n) { int b,i,k; b=n/2; for(i=(-b);i<=b;i++) for(k=(-b);k<=b;k++) { if(abs(k)>=b-abs(i)) printf("*"); else printf(" "); if(k==b) printf("\n"); } } int main() { int num; scanf("%d", &num); print_graphic(num); return 0; }
在這題中N是要處理的 輸入的數為奇數,又要輸出11行,對N/2就可以啦,我覺得我的程式碼還不夠抽象,直接看的話還是有一丟丟晦澀,函式中 i 代表y軸 k代表x軸,迴圈y軸每進行++操作就要輸出一個換行好啦,還有一系列輸出圖形的題目我陸續更新哈。
希望大家多多關注,小鑫會很努力地寫部落格的,我在這給各位大爺跪下了 噗通~~~~~~!