中央論壇 - CENTER BBS
標題:
數字螺旋圖
[打印本頁]
作者:
f66666602
時間:
2007-8-14 04:39
標題:
數字螺旋圖
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");
}
複製代碼
歡迎光臨 中央論壇 - CENTER BBS (https://www.centerbbs.com/)
Powered by Discuz! X3