Magic Numbers |
Write a program that finds and displays all pairs of integers and such that:
- neither nor have any digits repeated; and
- , where N is a given integer;
Input and Output
The input file consist a integer at the beginning indicating the number of test case followed by a blank line. Each test case consists of one line of input containing N. Two input are separated by a blank line.
For each input the output consists of a sequence of zero or more lines each containing / = N, where and N are the integers described above. When there are two or more solutions, sort them by increasing numerator values. Two consecutive output set will separated by a blank line.
Sample Input
1 1234567890
Sample Output
1234567890 / 1 = 1234567890 2469135780 / 2 = 1234567890 4938271560 / 4 = 1234567890 6172839450 / 5 = 1234567890 8641975230 / 7 = 1234567890 9876543120 / 8 = 1234567890
题意: 给一个n,求出有几种s1 / s2方式去得到他,并且s1,s2必须不能有重复的数字。
思路: 感觉这题题目不清不楚啊。没有n的范围啊。如果n很小那么情况会是非常多的肯定就超时了。。说明没有这样的数字,N应该都是很大的。所以去枚举到9876543210就结束了。然后去判断有没有重复的数字。
代码:
#include <stdio.h>
#include <string.h>
const long long MAXN = 9876543210;
int T, vis[10];
long long n, num;
bool check(long long num) {
memset(vis, 0, sizeof(vis));
while (num) {
if (vis[num % 10]) return false;
vis[num % 10]++;
num /= 10;
}
return true;
}
int main() {
scanf("%d", &T);
while (T--) {
scanf("%lld", &n);
for (long long i = 1; i <= MAXN; i ++) {
num = n * i;
if (num > MAXN) break;
if (check(num) && check(i))
printf("%lld / %lld = %lld\n", num, i, n);
}
if (T) printf("\n");
}
return 0;
}