题目:
编程输出以下格式的数据:
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;
}
}
大体思路是给数组一圈一圈的赋值。
不知道有没有更好的解法~