请看下面的算式:
(ABCD - EFGH) * XY = 900
每个字母代表一个0~9的数字,不同字母代表不同数字,首位不能为0。
比如,(5012 - 4987) * 36 就是一个解。
请找到另一个解,并提交该解中 ABCD 所代表的整数。
请严格按照格式,通过浏览器提交答案。
注意:只提交 ABCD 所代表的整数,不要写其它附加内容,比如:说明性的文字。
如果直接枚举这10个数,10! = 1e11
加上链表优化DFS 10! = 3628800
倒是可以满足
不过稍微想一下 就可以从xy入手,然后再枚举ABCD
#include <bits/stdc++.h>
using namespace std;
set<int> st;
void add(int x)
{
while (x) {
st.insert(x % 10);
x /= 10;
}
}
int main()
{
for (int xy = 10; xy < 100; xy++) {
if (900 % xy == 0) {
int t = 900 / xy;
for (int abcd = 1000; abcd < 10000; abcd++) {
int efgh = abcd - t;
st.clear();
add(xy);
add(abcd);
add(efgh);
if (st.size() == 10) cout << abcd << endl;
}
}
}
}
output
6048
5012
答案 6048