2013年10月9日星期三

幻方

/*
缘于:深圳腾讯2010安全技术竞赛:第一阶段第二题.
这里弄一个简单的:三阶幻方又叫九宫格.

这是一个算法题,我不懂矩阵相乘,排列组合,多元一次方程也不想用.
算法需要编程实现,这就是只最简单的编程,最慢的算法.

made by correy
made at 2013.10.09
email:kouleguan at hotmail dot com
homepage:http://correy.webs.com
*/

#include "stdio.h"
#include "stdlib.h"

void print_it(int a1,int a2,int a3,int b1,int b2,int b3,int c1,int c2,int c3)
{
    printf("\n\n");

    printf("%d %d %d \n",a1,a2,a3);
    printf("%d %d %d \n",b1,b2,b3);
    printf("%d %d %d \n",c1,c2,c3);
}

bool is_it(int a1,int a2,int a3,int b1,int b2,int b3,int c1,int c2,int c3)
{
    bool b = false;

    if (a1 == a2 || a1 == a3 || a1 == b1 || a1 == b2 || a1 == b3 || a1 == c1 || a1 == c2 || a1 == c3)
    {
        return b;
    }

    if (a2 == a3 || a2 == b1 || a2 == b2 || a2 == b3 || a2 == c1 || a2 == c2 || a2 == c3)
    {
        return b;
    }

    if (a3 == b1 || a3 == b2 || a3 == b3 || a3 == c1 || a3 == c2 || a3 == c3)
    {
        return b;
    }

    if (b1 == b2 || b1 == b3 || b1 == c1 || b1 == c2 || b1 == c3)
    {
        return b;
    }

    if (b2 == b3 || b2 == c1 || b2 == c2 || b2 == c3)
    {
        return b;
    }

    if (b3 == c1 || b3 == c2 || b3 == c3)
    {
        return b;
    }

    if (c1 == c2 || c1 == c3)
    {
        return b;
    }

    if (c2 == c3)
    {
        return b;
    }

    int x1 = a1 + a2 + a3;
    int x2 = b1 + b2 + b3;
    int x3 = c1 + c2 + c3;

    int y1 = a1 + b1 + c1;
    int y2 = a2 + b2 + c2;
    int y3 = a3 + b3 + c3;

    int xy = a1 + b2 + c3;
    int yx = a3 + b2 + c1;

    if (x1 == x2 && x1 == x3 && x1 == y1 && x1 == y2 && x1 == y3 && x1 == xy && x1 == yx)
    {
        b = true;
    }

    return b;
}

int main( int argc, char *argv[] )
{
    for (int a1 = 1;a1 <= 9;a1++)
    {
        for (int a2 = 1;a2 <= 9;a2++)
        {
            for (int a3 = 1;a3 <= 9;a3++)
            {
                for (int b1 = 1;b1 <= 9;b1++)
                {
                    for (int b2 = 1;b2 <= 9;b2++)
                    {
                        for (int b3 = 1;b3 <= 9;b3++)
                        {
                            for (int c1 = 1;c1 <= 9;c1++)
                            {
                                for (int c2 = 1;c2 <= 9;c2++)
                                {
                                    for (int c3 = 1;c3 <= 9;c3++)
                                    {
                                        bool b = is_it(a1,a2,a3,b1,b2,b3,c1,c2,c3);
                                        if (b)
                                        {
                                            print_it(a1,a2,a3,b1,b2,b3,c1,c2,c3);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }

    return 0;
}

没有评论:

发表评论