一個解決數字螺旋排列的程序

題目:

編程輸出以下格式的數據:
  When i=0
  
1

  When i=1
  
  7   8   9
  6   1   2
  5   4   3

  When i=2
  
    21  22  23  24  25
    20   7    8     9   10
    19   6    1     2   11
    18   5    4     3   12
    17  16  15  14  13


代碼實現:

//以when i = 3爲例

#include<iostream.h>
#include <iomanip.h>


/* 解決無法動態定義變長的二維數組:
三種典型的方法: 
1.用一維模擬。訪問時作下標轉換。 
2.用指針數組來做,相當於C#中的矩齒型數組。注意這種情況下分配的內存不是連續的。 
3.直接用std::vectory。
*/
void main()
{
int num = 7;       // num = 2*i + 1
int number = num;
        int matrix[7][7]; 
int start = num * num;
int index = 0;


while(num > 0)
{
//給第一行賦值
for(int i = num-1+index; i >= index; i--)  
matrix[index][i] = start--;

start++;//恢復start的值給第一列賦值
for (int j = index; j < num+index; j++)
matrix[j][index] = start--;

start++;//恢復start的值給最後一行賦值
for (int k = index; k < num+index; k++)
matrix[num-1+index][k] = start--;

start++;//恢復start的值最後一列賦值。此時第一輪結束。最後一列只有num-1個元素被賦值
for (int l = num-1+index; l > index; l--)
matrix[l][num-1+index] = start--;

num = num - 2;
index++;
}


//打印二維數組
for(int x = 0; x < number; x++)
{
for(int y = 0; y < number; y++)
cout<<setw(4)<<matrix[x][y];
cout<<endl;
}
}





大體思路是給數組一圈一圈的賦值。

不知道有沒有更好的解法~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章