漢諾塔簡單圖形設計思想1(C)
阿新 • • 發佈:2019-02-07
我們都知道漢諾塔遊戲,在C語言程式設計中,我們也可以簡單的設計出它的圖形,但是如何動態設計初始化漢諾塔的層數呢?這看起來有點棘手,但是隻要觀察其中的規律就可以用for迴圈語句的巢狀和if...else語句的巢狀設計出,至於更復雜的填充顏色這裡就不說了,只以學習其中的一些演算法和思想為目的
下面為是實現效果:
程式碼如下:
#include <stdio.h> #define N 10 //陣列的行 #define M 19 //陣列的列 char a[N][M]; //定義一個二維字元陣列來表示漢諾塔的圖形 void InitHanoi(int n) //初始化圖形 { for(int i=0; i<10; i++) //控制行 { for(int j=0; j<19; j++)//控制列 { if(j==9) //第九列作為中間柱子 a[i][j] = '|'; //列印“|”作為漢諾塔的中間柱子 else { if(i>=N-n) //輸出n層漢諾塔的盤子 { int k=i+n-10+1; //隨著i(行)的增加,列印*的左右範圍擴大 if(j>=9-k&&j<=9+k) a[i][j] = '*';//*作為漢諾塔的盤子 } else //除了列印漢諾塔外就列印空字元 { a[i][j] = ' '; } } } } } void DrawHanoi() //列印漢諾塔 { for(int i=0; i<10; i++) { for(int j=0; j<19; j++) { printf("%c",a[i][j]); } printf("\n"); //列印完一行換行 } printf("----------------------\n"); } int main() { int n; //漢諾塔的層數 printf("請輸入漢諾塔的層數:"); scanf("%d",&n);//(漢諾塔層數要小於10大於0) InitHanoi(n); //初始化漢諾塔的陣列 DrawHanoi(); //列印漢諾塔 return 0; }