码迷,mamicode.com
首页 > 其他好文 > 详细

趣味编程之九宫矩阵

时间:2014-12-01 12:56:00      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:c++   源代码   二维数组   二分查找   iostream   

题目描述:

        将1-9这九个数字排成三行三列,使其行列、对角线上三数之和均相同,试编程求所有的可能;

#include <iostream>
using namespace std;
int a[3][3], b[3][3];
int main()
{
    int i, tx, ty;
    int x = 0, y = 1;
    a[0][1] = 1;                 //将1放在第0行第1列
    for (i = 2; i <= 9; i++)
    {
        tx = (x + 2) % 3;
        ty = (y + 1) % 3;
        if (a[tx][ty] == 0)                 //如果斜上方未填数字
        {
            a[tx][ty] = i;              //x为行,y为列
            x = tx;
            y = ty;
        }
        else                                //否则填数到下方
        {
            x = (x + 1) % 3;
            a[x][y] = i;
        }
    }
    for (i = 0; i <= 3; ++i)
    {
        cout << a[0][0] << a[0][1] << a[0][2] << endl;
        cout << a[1][0] << a[1][1] << a[1][2] << endl;
        cout << a[2][0] << a[2][1] << a[2][2] << endl;
        cout << endl;
        cout << a[2][0] << a[2][1] << a[2][2] << endl;     //上下翻转
        cout << a[1][0] << a[1][1] << a[1][2] << endl;
        cout << a[0][0] << a[0][1] << a[0][2] << endl;
        cout << endl;
        for (int m = 0; m < 3; ++m)                         //借助辅助数组b进行翻转
            for (int n = 0; n < 3; ++n)
                b[n][2 - m] = a[m][n];
        for (int m = 0; m < 3; ++m)
            for (int n = 0; n < 3; ++n)
                a[m][n] = b[m][n];
    }
    return 0;
}

运行结果:

bubuko.com,布布扣


问题分析:

根据奇偶性质,满足题目要求的情况其实只有一种,四个角为偶数,其余五个空为奇数。

而偶数2,4,6,8这四个数,正好占据了矩形的四个角,以其中一个答案为例子;

bubuko.com,布布扣

填充规律是:把这个九宫格的边界看做和贪吃蛇一样吧,从一边出去从另一边对应的位置进来;

在第一行中间填1,然后向1的右上方走,到达到数值2的位置,依次类推,一直到碰到已经填的数字为止,此时数字向下走一步,然后继续向右上方走

当所有格字填满后,将这个九宫格翻转或者 镜像就能得到其它的情况。


心得:

这是我在一本C语言的书上看到的题目,然后按照它的代码改编的,正好我们刚刚开始学二维数组,一下子对二维数组的理解增加了不少。


趣味编程之九宫矩阵

标签:c++   源代码   二维数组   二分查找   iostream   

原文地址:http://blog.csdn.net/liuchang54/article/details/41644391

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!