題目:
編程輸出以下格式的數據:
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;
}
}
大體思路是給數組一圈一圈的賦值。
不知道有沒有更好的解法~