这道题目还是卡了很久,原因是要考虑0是不是出现过,要标记。
1 #include <stdio.h> 2 #include <ctype.h> 3 #include <string.h> 4 #include <stdlib.h> 5 #include <math.h> 6 7 void f(int a[], int n) 8 { 9 a[n%10] = 1; 10 n/=10; 11 while (n) 12 { 13 a[n%10] = 1; 14 n/=10; 15 } 16 return; 17 } 18 19 int main(void) 20 { 21 int n, i, a[11], k, temp; 22 freopen("in", "r", stdin); 23 while (~scanf("%d", &n)) 24 { 25 for (i = 100; i < 50000; ++i) 26 { 27 k = i * n; 28 memset(a, 0, sizeof(a)); 29 temp = k; 30 if (temp/100000!=0) continue; 31 f(a, temp); 32 f(a, i); 33 a[temp/10000] = a[i/10000] = 1; 34 int mrk=1; 35 for (int s = 0; s < 10; ++s) 36 { 37 if(!a[s]) 38 {mrk = 0; break;} 39 } 40 if (mrk == 1) printf("%05d / %05d = %d\n", k, i, n); 41 } 42 43 } 44 45 return 0; 46 }
标记的时候要认真考虑特殊情况。