九宫格为问题

在《射雕英雄传》中黄蓉曾破解九宫格,口诀:戴九履一,左三右七,二四有肩,八六为足,五居中央。
有口诀的!!
一居上行正中央,依次斜填莫相忘,上出框时向下放,右出框时向左放,排重编在下格放,右上排重一个样。
 
「重排九宫」有两种玩法:
第一种是在在3×3方格盘上,是把1至8八个小木块随意摆放,每一空格其周围的数字可移至空格。玩者要将小木块按12345678的顺序重新排好,以最少的移动次数拼出结果者为胜。
第二种玩法如九宫格算术游戏玩法,推动木格中8个数字排列,横竖都有3个格,使每行、每列两个对角线上的三数之和都等于15。在计算的同时,还必须思考怎么把数字方块推动到相对应的位置上,这个游戏不仅仅考验人的数字推理能力,也同时考验了人的思维逻辑能力。

  针对奇数阶数的幻方填写方法:

注意:二维数组指针的创建和释放。

#include<iostream>
#include<cstring>
#include<iomanip>
using namespace std;
int main()
{
    int n;
    cin>>n;
    cout<<endl;
    int **a=new int*[n];
    for(int i=0;i<n;i++)
    {
        a[i]=new int [n];
        memset(a[i],0,n*sizeof(int));

    }
    int r=0;
    int l=n/2;
    for(int i=1;i<=n*n;i++)
    {
        a[r][l]=i;
        r--;
        l++;
        if(r<0&&l>=n)
        {
            r+=2;
            l--;
        }
        else if(r<0)
        {
            r=n-1;
        }
        else if(l>=n)
        {
            l=0;
        }
        else if(a[r][l]!=0)
        {
            l--;
            r+=2;
        }
    }
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<setw(4)<<a[i][j];
        }
        cout<<endl;
    }
    for(int i=n;i>0;)
    {
        delete[] a[--i];
    }
    delete[] a;
    return 0;
}





猜你喜欢

转载自blog.csdn.net/qq_37621623/article/details/78690133