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

[教學] 數字螺旋圖

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-9-4 09:08:24 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
void main()
{
        int*        p = NULL;
        int                n = 0;

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

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

        // 若成功向系統取得空間
        if(p != NULL)
        {
                int        nCount = 0;
                int nNext = 0;
                int x = 0;
                int y = 0;
                int nNumber = 1;

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

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

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

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

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

                                // 若是下一個位置超出陣列的範圍(x+1 == n)
                                // 或是下一個位置已經被設定過(*(p + (x+1) + (y*n)) != -1)
                                // 則換下一個方向
                                if( (x+1 == n) || (*(p + (x+1) + (y*n)) != -1))
                                {
                                        nDirection++;
                                }
                        }
                        else if(nDirection == 1)
                        {
                                // 若是向下移
                                y++;

                                // 若是下一個位置超出陣列的範圍(y+1 == n)
                                // 或是下一個位置已經被設定過(*(p + x + ( (y+1) *n)) != -1)
                                // 則換下一個方向
                                if( (y+1 == n) || (*(p + x + ( (y+1) *n)) != -1))
                                {
                                        nDirection++;
                                }
                        }
                        else if(nDirection == 2)
                        {
                                // 若是向左移
                                x--;

                                // 若是下一個位置超出陣列的範圍(x-1 == -1)
                                // 或是下一個位置已經被設定過(*(p + (x-1) + (y*n)) != -1)
                                // 則換下一個方向
                                if( (x-1 == -1) || (*(p + (x-1) + (y*n)) != -1))
                                {
                                        nDirection++;
                                }
                        }
                        else if(nDirection == 3)
                        {
                                // 若是向上移
                                y--;

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

                        // 設定的數值+1
                        nNumber++;

                        // 若設定的數值大於10
                        // 則重新設為0
                        if(nNumber >= 10)
                        {
                                nNumber = 0;
                        }
                }

                printf("\n");

                // 列印出陣列的值
                for(int i=0 ; i<n ; i++)
                {
                        for(int j=0 ; j<n ;j++)
                        {
                                printf("%d ", *(p + j + (i*n)));
                        }

                        printf("\n");
                }

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

                        p = NULL;
                }
        }

        system("pause");
}
您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

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


Page Rank Check

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

手機版|中央論壇

GMT+8, 2026-6-25 12:40 , Processed in 0.038588 second(s), 16 queries .

Powered by Discuz!

© 2005-2015 Copyrights. Set by YIDAS

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