搜索
熱搜: 活動 交友 discuz
查看: 2477|回復: 0
打印 上一主題 下一主題

[教學] 數字螺旋圖

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-8-14 04:39:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. void main()
  2. {
  3.         int*        p = NULL;
  4.         int                n = 0;

  5.         // 輸入n的值
  6.         printf("\n輸入n值:");
  7.         scanf("%d", &n);

  8.         // 向系統取得n * n大小的int空間(n * n的陣列)
  9.         p = new int[n * n];

  10.         // 若成功向系統取得空間
  11.         if(p != NULL)
  12.         {
  13.                 int        nCount = 0;
  14.                 int nNext = 0;
  15.                 int x = 0;
  16.                 int y = 0;
  17.                 int nNumber = 1;

  18.                 // 設定方向( 0==>右 ; 1==>下 ; 2==>左 ; 3==>上 )
  19.                 int nDirection = 0;

  20.                 // 先將取得的空間,作初使化(全設為-1)
  21.                 memset(p, -1, sizeof(int)*(n * n));               

  22.                 // 設定n*n的數字螺旋圖
  23.                 // 因為是 n * n的陣列,故設定完n * n次後,即離開迴圈
  24.                 while(nCount < n * n)
  25.                 {
  26.                         nCount++;

  27.                         // 設定n*n的數字螺旋圖
  28.                         *(p + x + (y*n)) = nNumber;

  29.                         // 設定下一個要設定的位置
  30.                         // 若是向右移
  31.                         if(nDirection == 0)
  32.                         {
  33.                                 x++;

  34.                                 // 若是下一個位置超出陣列的範圍(x+1 == n)
  35.                                 // 或是下一個位置已經被設定過(*(p + (x+1) + (y*n)) != -1)
  36.                                 // 則換下一個方向
  37.                                 if( (x+1 == n) || (*(p + (x+1) + (y*n)) != -1))
  38.                                 {
  39.                                         nDirection++;
  40.                                 }
  41.                         }
  42.                         else if(nDirection == 1)
  43.                         {
  44.                                 // 若是向下移
  45.                                 y++;

  46.                                 // 若是下一個位置超出陣列的範圍(y+1 == n)
  47.                                 // 或是下一個位置已經被設定過(*(p + x + ( (y+1) *n)) != -1)
  48.                                 // 則換下一個方向
  49.                                 if( (y+1 == n) || (*(p + x + ( (y+1) *n)) != -1))
  50.                                 {
  51.                                         nDirection++;
  52.                                 }
  53.                         }
  54.                         else if(nDirection == 2)
  55.                         {
  56.                                 // 若是向左移
  57.                                 x--;

  58.                                 // 若是下一個位置超出陣列的範圍(x-1 == -1)
  59.                                 // 或是下一個位置已經被設定過(*(p + (x-1) + (y*n)) != -1)
  60.                                 // 則換下一個方向
  61.                                 if( (x-1 == -1) || (*(p + (x-1) + (y*n)) != -1))
  62.                                 {
  63.                                         nDirection++;
  64.                                 }
  65.                         }
  66.                         else if(nDirection == 3)
  67.                         {
  68.                                 // 若是向上移
  69.                                 y--;

  70.                                 // 若是下一個位置超出陣列的範圍(y-1 == -1)
  71.                                 // 或是下一個位置已經被設定過(*(p + x + ( (y-1) *n)) != -1)
  72.                                 // 則換下一個方向
  73.                                 if( (y-1 == -1) || (*(p + x + ( (y-1) *n)) != -1))
  74.                                 {
  75.                                         nDirection = 0;
  76.                                 }
  77.                         }

  78.                         // 設定的數值+1
  79.                         nNumber++;

  80.                         // 若設定的數值大於10
  81.                         // 則重新設為0
  82.                         if(nNumber >= 10)
  83.                         {
  84.                                 nNumber = 0;
  85.                         }
  86.                 }

  87.                 printf("\n");

  88.                 // 列印出陣列的值
  89.                 for(int i=0 ; i<n ; i++)
  90.                 {
  91.                         for(int j=0 ; j<n ;j++)
  92.                         {
  93.                                 printf("%d ", *(p + j + (i*n)));
  94.                         }

  95.                         printf("\n");
  96.                 }

  97.                 // 釋放向系統取得的空間
  98.                 {
  99.                         delete[] p;

  100.                         p = NULL;
  101.                 }
  102.         }

  103.         system("pause");
  104. }
複製代碼
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

本論壇為非營利之網路平台,所有文章內容均為網友自行發表,不代表論壇立場!若涉及侵權、違法等情事,請告知版主處理。


Page Rank Check

廣告刊登  |   交換連結  |   贊助我們  |   服務條款  |   免責聲明  |   客服中心  |   中央分站

手機版|中央論壇

GMT+8, 2026-6-4 08:33 , Processed in 0.032489 second(s), 17 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

快速回復 返回頂部 返回列表