1. 程式人生 > >山東科技大學 OJPrint Graphics Problerm (IV) (Append Code)

山東科技大學 OJPrint Graphics Problerm (IV) (Append Code)

 

對於這種輸出菱形樣式的圖形我在這裡為大家總結了一點簡單方法,這需要一點點抽象思維,但也不是很難的哦,大家不要害怕,請聽小鑫娓娓道來。

首先我們要了解編譯器輸出格式以及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軸每進行++操作就要輸出一個換行好啦,還有一系列輸出圖形的題目我陸續更新哈。

希望大家多多關注,小鑫會很努力地寫部落格的,我在這給各位大爺跪下了     噗通~~~~~~!