看下面的算式:
□□ 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源程序或者指点下思路
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);
}
}
}
我的思路是把1-9 9个数字可能的情况全排列 比如123456789, 467923158。。。。每个都乘一下看看
我知道,你能写出按字典序排列且去重的代码吗,不要用C++
这个问题的关键还不在于全排列,而在于如何去重,也就是说46 x 79 = 23 x 158和79 x 46 = 23 x 158只输出一个
@火星十一郎: 把46 79 记在数组中?