2012-01-29 14:35:19Morris
[UVA] 471 - Magic Numbers
Magic Numbers
做法 : 爆搜
#include <stdio.h>
const long long limit = 9876543210LL;
int Check(long long n) {
char digit[10] = {0}, s[11], i = 0;
sprintf(s, "%lld", n);
while(s[i]) {
digit[s[i]-'0']++;
if(digit[s[i]-'0'] == 2)
return 0;
i++;
}
return 1;
}
int main() {
int T;
long long n, m, i;
scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
for(i = 1; n*i <= limit; i++) {
m = n*i;
if(Check(i) && Check(m))
printf("%lld / %lld = %lld\n", m, i, n);
}
if(T) puts("");
}
return 0;
}
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
做法 : 爆搜
#include <stdio.h>
const long long limit = 9876543210LL;
int Check(long long n) {
char digit[10] = {0}, s[11], i = 0;
sprintf(s, "%lld", n);
while(s[i]) {
digit[s[i]-'0']++;
if(digit[s[i]-'0'] == 2)
return 0;
i++;
}
return 1;
}
int main() {
int T;
long long n, m, i;
scanf("%d", &T);
while(T--) {
scanf("%lld", &n);
for(i = 1; n*i <= limit; i++) {
m = n*i;
if(Check(i) && Check(m))
printf("%lld / %lld = %lld\n", m, i, n);
}
if(T) puts("");
}
return 0;
}