#include <iostream>
#include <iomanip>
using std::endl;
using std::cout;
using std::setw;
void OutputTuoluo(const int kSize)
{
int *array_data = new int[kSize*kSize];
int right = kSize;
int down = kSize - 1;
int left = kSize - 1;
int up = kSize - 2;
int total_num = 0;
int m = -1;
int kTotalNum = kSize * kSize;
while(total_num < kTotalNum)
{
//c从左到右
for(int temp_right = right; temp_right > 0; --temp_right)
{
array_data[++m] = (++total_num);
}
//从上到下
for(int temp_down = down; temp_down > 0; --temp_down)
{
m += kSize;
array_data[m] = (++total_num);
}
//从右到左
for(int temp_left = left;temp_left > 0; --temp_left)
{
array_data[--m] = (++total_num);
}
//从下到上
for(int temp_up = up; temp_up > 0; --temp_up)
{
m -= kSize;
array_data[m] = (++total_num);
}
right -= 2;
down -= 2;
left -= 2;
up -= 2;
}
int index =0;
for( m = 0; m < kSize; ++m)
{
for(int n = 0; n < kSize; ++n)
{
cout<<setw(6)<<array_data[index++];
}
cout<<endl<<endl;
}
delete []array_data;
}
int main()
{
OutputTuoluo(1);
OutputTuoluo(2);
OutputTuoluo(3);
OutputTuoluo(4);
OutputTuoluo(5);
OutputTuoluo(6);
OutputTuoluo(7);
return 0;
}
结果如下
1
1 2
4 3
1 2 3
8 9 4
7 6 5
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
1 2 3 4 5 6
20 21 22 23 24 7
19 32 33 34 25 8
18 31 36 35 26 9
17 30 29 28 27 10
16 15 14 13 12 11
1 2 3 4 5 6 7
24 25 26 27 28 29 8
23 40 41 42 43 30 9
22 39 48 49 44 31 10
21 38 47 46 45 32 11
20 37 36 35 34 33 12
19 18 17 16 15 14 13