魔方吧·中文魔方俱乐部

 找回密码
 注册
搜索
热搜: 魔方
楼主: Osullivan
打印 上一主题 下一主题

数学高手编程高手进 [复制链接]

Rank: 2

积分
214
帖子
3
精华
0
UID
9819
性别
31#
发表于 2009-6-10 16:11:27 |只看该作者
/*
1 - 9 数字填入

□     □     □
---- + ---- + ---- = 1
□□   □□   □□


a0     a3     a6
---- + ---- + ---- = 1
a1a2   a4a5   a7a8

a0*a4a5*a7a8 + a3*a1a2*a7a8 + a6*a1a2*a4a5 = a1a2*a4a5*a7a8

*/
void FillNum(int * arr, int index)
{
        int i, j;
        for (i = 1; i <= 9; i++)
        {
                for (j=0; j<index; j++)
                {
                        if (arr[j] == i)
                                break;
                }
                if (j == index)
                {
                        arr[index] = i;
                        if (index < 8)
                        {
                                FillNum(arr, index+1);
                        }
                        else
                        {
                                if (arr[0] * (arr[4] * 10 + arr[5]) * (arr[7] * 10 + arr[8]) + arr[3] * (arr[1] * 10 + arr[2]) * (arr[7] * 10 + arr[8])
                                        + arr[6] * (arr[1] * 10 + arr[2]) * (arr[4] * 10 + arr[5]) == (arr[1] * 10 + arr[2]) * (arr[4] * 10 + arr[5]) * (arr[7] * 10 + arr[8]) )
                                {
                                        printf("-------------------------------n");
                                        printf(" %2d     %2d     %2dn", arr[0], arr[3], arr[6]);
                                        printf("---- + ---- + ---- = 1n");
                                        printf("%2d%2d   %2d%2d   %2d%2dn", arr[1], arr[2], arr[4], arr[5], arr[7], arr[8]);
                                }
                                return;
                        }
                }
        }
}
void main()
{
        int arrNum[9];
        FillNum(arrNum, 0);
}

C++写的,递归实现
排列组合的问题,用程序似乎效率都不高,一般都是穷举法

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|魔方吧·中文魔方俱乐部

GMT+8, 2024-6-3 21:13

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部