当前位置: 代码迷 >> 综合 >> 打印魔方阵(C语言)
  详细解决方案

打印魔方阵(C语言)

热度:11   发布时间:2024-01-19 12:27:31.0

魔方阵是这样的方阵:它的每一行,每一列和对角线之和均相等。

输入n,要求打印由自然数构成的魔方阵(n为奇数)

魔方阵中各数排列规律如下:

(1)将“1”放在第一行的中间一列;

(2)从“2”开始直到n*n为止的各数依次按下列规则存放:每一个数存放的行比前一个数的行数减一,列数同样加1.

(3)如果上一个数的列数为1,则下一个数的行数为n(最后一行)

(4)当上一个数的列数为n时,下一个数的列数应为1,行数减1

(5)如果按上面规则确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。

C语言实现:

#include "stdio.h"
#define N 10
void main()
{
 int n,i,j,a,b,num,u,v;
 int c[10][10];
 printf("请输入奇数:");
 scanf("%d",&n);
 while(n%2==0)
 {
       printf("请输入奇数:");
    scanf("%d",&n);
 }
 num=n*n;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
   c[i][j]=0;
 c[0][n/2]=1;
 a=0;
 b=n/2;
    for(i=2;i<=num;i++)
 {
  if(a)
     u=a-1;
  else
     u=n-1;
  v=(b+1)%n;
  if(!c[u][v])
   c[u][v]=i;
  else
  {
     u=(a+1)%n;
     v=b;
     c[u][v]=i;
  }
  a=u;
  b=v;

 }
    for(i=0;i<n;i++)
 { for(j=0;j<n;j++)
   printf("%4d",c[i][j]);
  printf("\n");
 }
}

??
  相关解决方案