给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。

先来个3*3

8 1 6
3 5 7
4 9 2

n奇数幻方口诀:
1. 数字1放在第一行中间
2. 依次放在上一个数的右上角
2.1如果右边出去了就回到左边
2.2 如果上面出去了就放下面
2.3 如果右上角有了就放在这个数的下面

vector<vector<int> > Shudu(int n)
{
vector<vector<int> > ret(n, vector<int>(n, 0));
int i = 0, j = n/2, k = 2;
ret[i][j] = 1;

while(k <= n*n)
{
int tempi = i-1;
int tempj = j+1;
if(tempi < 0)
tempi = n-1;
if(tempj > n-1)
tempj = 0;
if(ret[tempi][tempj] != 0)
{
tempi = i+1;
tempj = j;
}
ret[tempi][tempj] = k;
i = tempi;
j = tempj;
++k;
}
return ret;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值