入门经典 7.1.1 除法

开始没思路,但是仔细思考一下,发现可以枚举,然后找一下上界和下界,可以知道范围并不大。我的枚举量是将近50000的样子,书上说枚举量可以降低到10000……没懂,再想一下

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <map> 
 6 using namespace std;
 7 map<int, bool> mymap;
 8 void solve(int i) {
 9   while (i) {
10     mymap[i%10] = true;
11     i /= 10;
12   }
13 }
14 void init() {
15   int n, i, j;
16   while (~scanf("%d", &n)) {
17     for (i = 1200; i < 50000; ++i) {
18       if ((i*n)/10000 == 0 || (i*n)/10000 >= 10) continue;
19       mymap.clear();
20       solve(i); solve(i * n);
21       if (i/10000 == 0) mymap[0] = true;
22       for (j = 0; j < 10; ++j) {
23         if (!mymap[j]) break;
24       }
25       if (j == 10) printf("%05d / %05d = %d\n", i*n, i, n);
26     }
27   }
28 }
29 
30 int main(void) {
31   freopen("7.1.1.in", "r", stdin);
32   init();
33   return 0;
34 }

注意一下21行,就是当枚举的 i 的值是四位数字的时候,要把0标记。

posted on 2013-05-22 18:32  aries__liu  阅读(251)  评论(0编辑  收藏  举报