首页 新闻 搜索 专区 学院

2011蓝桥杯决赛:猜算式

-1
悬赏园豆:10 [已解决问题] 解决于 2012-12-31 07:16

看下面的算式:

□□ x □□ = □□ x □□□

它表示:两个两位数相乘等于一个两位数乘以一个三位数。

如果没有限定条件,这样的例子很多。

但目前的限定是:这9个方块,表示1~9的9个数字,不包含0。 该算式中1至9的每个数字出现且只出现一次!

比如: 46 x 79 = 23 x 158 54 x 69 = 27 x 138 54 x 93 = 27 x 186 .....

请编程,输出所有可能的情况!

注意:左边的两个乘数交换算同一方案,不要重复输出!

要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性; 不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。

 

 请给出C源程序或者指点下思路

加拿大小哥哥的主页 加拿大小哥哥 | 初学一级 | 园豆:183
提问于:2012-12-26 21:29
< >
分享
最佳答案
1

staticvoidMain(string[] args)
{
    Sore(newList<int>(), 0);
    Console.ReadLine();
}
staticvoidSore(List<int> list, intn)
{
    if(n >= 9)
    {
        inta = list[0] * 10 + list[1];
        intb = list[2] * 10 + list[3];
        intc = list[4] * 100 + list[5] * 10 + list[6];
        intd = list[7] * 10 + list[8];
        if(a * b == c * d&&a<b)
        Console.WriteLine(string.Format("{0}*{1}={2}*{3}", a, b, c, d));
        return;
    }
    for(inti = 1; i < 10; i++)
    {
        if(list.Contains(i))
        continue;
        else
        {
            list.Add(i);
            Sore(list, n + 1);
            list.Remove(i);
        }
    }
}

收获园豆:7
飘渺逸风 | 菜鸟二级 |园豆:232 | 2012-12-27 12:22
其他回答(1)
0

我的思路是把1-9 9个数字可能的情况全排列 比如123456789,  467923158。。。。每个都乘一下看看

收获园豆:3
死白的man | 园豆:2135 (老鸟四级) | 2012-12-27 09:29

我知道,你能写出按字典序排列且去重的代码吗,不要用C++

支持(0) 反对(0) 加拿大小哥哥 | 园豆:183 (初学一级) | 2012-12-27 10:26

这个问题的关键还不在于全排列,而在于如何去重,也就是说46 x 79 = 23 x 158和79 x 46 = 23 x 158只输出一个

支持(0) 反对(0) 加拿大小哥哥 | 园豆:183 (初学一级) | 2012-12-27 10:54

@火星十一郎: 把46 79 记在数组中?

支持(0) 反对(0) 死白的man | 园豆:2135 (老鸟四级) | 2012-12-27 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册