奇阶魔方

下面是一个奇阶魔方:
奇阶魔方的意思是说在这个矩阵当中,横行或竖排加起来的和相等。
请编写一个生成奇阶魔方的通用程序在:
30 39 48  1 10 19 28
38 47  7  9 18 27 29 
46  6  8 17 26 35 37
 5 14 16 25 34 36 45 
13 15 24 33 42 44  4
21 23 32 41 43  3 12
22 31 40 49  2 11 20


下面是算法:
在奇阶魔方当中,第一行中间为1.
如果第i行j列刚填完数字k。如果右上角没有填数字。则在其右上角填k+1;否则在它下面填k+1;
如果第一行第n列填后,在第二行第n列填k+1;
如果第i行第n列填后,在第i—1行第1列填k+1;
如果第1行第j列填后,在第n行j+1处填k+1;

 


#include<iostream.h>
#define N 7
void main(){
 int a[N+1][N+1];
 int i=1;
 int k=1;
 int j=(N+1)/2;
 a[i][j]=1;
 int i0,j0;
 
 while(k<N*N){
  k=k+1;
  i0=i-1;
  j0=j+1;
  if(i0<1&&j0>N)
  {i=2;j=N;}
  else
   if(i0<1&&j0<=N)
   {i=N;j=j0;}
   else
    if(i0>=1&&j0>N)
    {i=i0;j=1;}
    else
     if(a[i0][j0]>0)
      i=i+1;
     else
     {i=i0;j=j0;}
     a[i][j]=k;
 }
for(i=1;i<=N;i++)
{for(j=1;j<=N;j++)
cout<<"   "<<a[i][j];
cout<<endl;
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值