主题:N阶螺旋幻方程序
/**
* N阶螺旋幻方程序
* 完成者:meteor135
* 完成日期:2003.9.9
* 编译环境:VC6.0
*/
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void showFangzhen(int n);
int main()
{
//输出10组螺旋幻方
for(int n = 0; n < 10; n ++)
showFangzhen(n+1);
cout<<"Press enter to quit!";
cin.get();
return 0;
}
void showFangzhen(int n)
{
int i,j,k,**array;
//为指针分配动态内存
array=new int*[n];
for(i=0; i<n; i++)
{
array[i] = new int[n];
}
//初始化数组
for(i=0,k=1; i<n/2; i++)
{
for(j=0;j<n-1-2*i;j++)
array[j+i][n-i-1] = k++;
for(j=0;j<n-1-2*i;j++)
array[n-1-i][n-1-j-i] = k++;
for(j=0;j<n-1-2*i;j++)
array[n-j-1-i][i] = k++;
for(j=0;j<n-1-2*i;j++)
array[i][j+i] = k++;
}
if(n%2)
array[n/2][n/2] = k;
//输出n阶螺旋幻方
cout<<n<<"阶螺旋幻方:"<<endl;
for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
{
cout<<setw(int(log10(n*n))+2)<<array[i][j];
}
cout<<endl;
}
cout<<endl;
//释放动态内存
for(i=0; i<n; i++)
{
delete[] array[i];
}
delete[] array;
}
//这是输出结果:
/*
1阶螺旋幻方:
1
2阶螺旋幻方:
4 1
3 2
3阶螺旋幻方:
7 8 1
6 9 2
5 4 3
4阶螺旋幻方:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
5阶螺旋幻方:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
6阶螺旋幻方:
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6
7阶螺旋幻方:
19 20 21 22 23 24 1
18 37 38 39 40 25 2
17 36 47 48 41 26 3
16 35 46 49 42 27 4
15 34 45 44 43 28 5
14 33 32 31 30 29 6
13 12 11 10 9 8 7
8阶螺旋幻方:
22 23 24 25 26 27 28 1
21 44 45 46 47 48 29 2
20 43 58 59 60 49 30 3
19 42 57 64 61 50 31 4
18 41 56 63 62 51 32 5
17 40 55 54 53 52 33 6
16 39 38 37 36 35 34 7
15 14 13 12 11 10 9 8
9阶螺旋幻方:
25 26 27 28 29 30 31 32 1
24 51 52 53 54 55 56 33 2
23 50 69 70 71 72 57 34 3
22 49 68 79 80 73 58 35 4
21 48 67 78 81 74 59 36 5
20 47 66 77 76 75 60 37 6
19 46 65 64 63 62 61 38 7
18 45 44 43 42 41 40 39 8
17 16 15 14 13 12 11 10 9
10阶螺旋幻方:
28 29 30 31 32 33 34 35 36 1
27 58 59 60 61 62 63 64 37 2
26 57 80 81 82 83 84 65 38 3
25 56 79 94 95 96 85 66 39 4
24 55 78 93 100 97 86 67 40 5
23 54 77 92 99 98 87 68 41 6
22 53 76 91 90 89 88 69 42 7
21 52 75 74 73 72 71 70 43 8
20 51 50 49 48 47 46 45 44 9
19 18 17 16 15 14 13 12 11 10
Press enter to quit!
*/
* N阶螺旋幻方程序
* 完成者:meteor135
* 完成日期:2003.9.9
* 编译环境:VC6.0
*/
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
void showFangzhen(int n);
int main()
{
//输出10组螺旋幻方
for(int n = 0; n < 10; n ++)
showFangzhen(n+1);
cout<<"Press enter to quit!";
cin.get();
return 0;
}
void showFangzhen(int n)
{
int i,j,k,**array;
//为指针分配动态内存
array=new int*[n];
for(i=0; i<n; i++)
{
array[i] = new int[n];
}
//初始化数组
for(i=0,k=1; i<n/2; i++)
{
for(j=0;j<n-1-2*i;j++)
array[j+i][n-i-1] = k++;
for(j=0;j<n-1-2*i;j++)
array[n-1-i][n-1-j-i] = k++;
for(j=0;j<n-1-2*i;j++)
array[n-j-1-i][i] = k++;
for(j=0;j<n-1-2*i;j++)
array[i][j+i] = k++;
}
if(n%2)
array[n/2][n/2] = k;
//输出n阶螺旋幻方
cout<<n<<"阶螺旋幻方:"<<endl;
for(i=0; i<n; i++)
{
for(j=0;j<n;j++)
{
cout<<setw(int(log10(n*n))+2)<<array[i][j];
}
cout<<endl;
}
cout<<endl;
//释放动态内存
for(i=0; i<n; i++)
{
delete[] array[i];
}
delete[] array;
}
//这是输出结果:
/*
1阶螺旋幻方:
1
2阶螺旋幻方:
4 1
3 2
3阶螺旋幻方:
7 8 1
6 9 2
5 4 3
4阶螺旋幻方:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
5阶螺旋幻方:
13 14 15 16 1
12 23 24 17 2
11 22 25 18 3
10 21 20 19 4
9 8 7 6 5
6阶螺旋幻方:
16 17 18 19 20 1
15 30 31 32 21 2
14 29 36 33 22 3
13 28 35 34 23 4
12 27 26 25 24 5
11 10 9 8 7 6
7阶螺旋幻方:
19 20 21 22 23 24 1
18 37 38 39 40 25 2
17 36 47 48 41 26 3
16 35 46 49 42 27 4
15 34 45 44 43 28 5
14 33 32 31 30 29 6
13 12 11 10 9 8 7
8阶螺旋幻方:
22 23 24 25 26 27 28 1
21 44 45 46 47 48 29 2
20 43 58 59 60 49 30 3
19 42 57 64 61 50 31 4
18 41 56 63 62 51 32 5
17 40 55 54 53 52 33 6
16 39 38 37 36 35 34 7
15 14 13 12 11 10 9 8
9阶螺旋幻方:
25 26 27 28 29 30 31 32 1
24 51 52 53 54 55 56 33 2
23 50 69 70 71 72 57 34 3
22 49 68 79 80 73 58 35 4
21 48 67 78 81 74 59 36 5
20 47 66 77 76 75 60 37 6
19 46 65 64 63 62 61 38 7
18 45 44 43 42 41 40 39 8
17 16 15 14 13 12 11 10 9
10阶螺旋幻方:
28 29 30 31 32 33 34 35 36 1
27 58 59 60 61 62 63 64 37 2
26 57 80 81 82 83 84 65 38 3
25 56 79 94 95 96 85 66 39 4
24 55 78 93 100 97 86 67 40 5
23 54 77 92 99 98 87 68 41 6
22 53 76 91 90 89 88 69 42 7
21 52 75 74 73 72 71 70 43 8
20 51 50 49 48 47 46 45 44 9
19 18 17 16 15 14 13 12 11 10
Press enter to quit!
*/