求c语言输出所有三阶魔方阵的方法,
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求c语言输出所有三阶魔方阵的方法,相关的知识,希望对你有一定的参考价值。
尚未学习函数和指针
参考技术A 下面是n阶奇数魔方阵的程序,输入的数字是几,就输出几阶魔方阵:# include <stdio.h>
void main()
int array[16][16];
int i, j, k, m, n;
/* 变量初始化 */
m = 1;
while(m == 1)
printf("请输入n(0<n<=15),n是奇数)\n");
scanf("%d", &n);
/* 判断n是否是大于0小于等于15的奇数 */
if((n!=0) && (n<=15) && (n%2!=0))
printf("矩阵阶数是 %d\n", n);
m = 0;
/* 数组赋初值为0 */
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
array[i][j] = 0;
/* 建立魔方阵 */j = n/2 + 1;
array[1][j] = 1;
for(k=2; k<=n*n; k++)
i = i - 1;
j = j + 1;
if((i<1) && (j>n))
i = i + 2;
j = j - 1;
else
if(i < 1)
i = n;
if(j > n)
j = 1;
if(array[i][j] == 0)
array[i][j] = k;
else
i = i + 2;
j = j - 1;
array[i][j] = k;
/* 输出魔方阵 */for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
printf("%5d", array[i][j]);
printf("\n");
本回答被提问者采纳
魔方阵算法
输出"魔方阵"。所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。例如,三阶魔方阵为
8 1 6
3 5 7
4 9 2
要求输出1~n*n的自然数构成的魔方阵。解:魔方阵中各数的排列规律如下:
(1)将1放在第1行的中间一列。
(2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列)
(3)如果上一数的行数为1,则下一个数的行数为n(指最下一行)。例如,1在第一行,则2应放在最下一行,列数同样+1
(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1,例如,2在第3行最后一列,则3应放在第二行第一列
(5)如果按上面规则确定的位置上已有数,或上一个数是第一行第n列时,则把下一个数放在上一个数的下面。例如,按上面的规定,4应该放在第1行第2列,但该位置已经被1占据,所以4就放在3的
下面。由于6是第1行第3列(即最后一列),故7放在6下面。按此方法可以得到任何阶的魔方阵。
代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define MIN 1 4 #define MAX 20 5 #define EMPTY 0 6 7 signed main() 8 { 9 int magic_square[MAX][MAX]={EMPTY}; 10 int n; 11 12 printf("请输入阶数(1~15之间的奇数):"); 13 scanf("%d",&n); 14 if( n<MIN || n>MAX || !(n%2) ) printf("输入错误,请重新输入! "); 15 else{ 16 int num; 17 const int _begin=1,_end=n*n; 18 int row,col; 19 for(num=_begin; num<=_end; num++){ 20 if( num==_begin ){ 21 row=0; 22 col=n/2; 23 } 24 else{ 25 int row_n=(row-1+n)%n; 26 int col_n=(col+1)%n; 27 if( magic_square[row_n][col_n]!=EMPTY ){ 28 row++; 29 } 30 else{ 31 row=row_n; 32 col=col_n; 33 } 34 } 35 magic_square[row][col]=num; 36 } 37 } 38 int row,col; 39 for(row=0;row<n;row++){ 40 for(col=0;col<n;col++){ 41 printf("%5d",magic_square[row][col]); 42 } 43 printf(" "); 44 } 45 return 0; 46 }
以上是关于求c语言输出所有三阶魔方阵的方法,的主要内容,如果未能解决你的问题,请参考以下文章