题目大意:给出一个数n,问有多少组数满足ans / i = n,要求说ans和i为Magic Number,即组成的数字没有重复的。
解题思路:因为Magic Number组成的数字互相不想同,所以最大的情况也就9876543210,检索的范围大大减小了。
#include <stdio.h>
#include <string.h>
typedef long long ll;
const ll INF = 9876543210;
bool judge(ll c) {
int v[15];
memset(v, 0, sizeof(v));
while (c) {
int t = c % 10;
if (v[t]) return false;
v[t]++;
c /= 10;
}
return true;
}
int main () {
int cas;
ll n, ans;
scanf("%d", &cas);
while (cas--) {
scanf("%lld", &n);
for (ll i = 1; i <= INF; i++) {
ans = i * n;
if (ans > INF) break;
if (judge(ans) && judge(i))
printf("%lld / %lld = %lld\n", ans, i, n);
}
if (cas) printf("\n");
}
return 0;
}