入门经典 7.1.1 除法

May 22, 2013

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


#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <map> 
using namespace std;
map<int, bool> mymap;
void solve(int i) {
  while (i) {
    mymap[i%10] = true;
    i /= 10;
  }
}
void init() {
  int n, i, j;
  while (~scanf("%d", &n)) {
    for (i = 1200; i < 50000; ++i) {
      if ((i*n)/10000 == 0 || (i*n)/10000 >= 10) continue;
      mymap.clear();
      solve(i); solve(i * n);
      if (i/10000 == 0) mymap[0] = true;
      for (j = 0; j < 10; ++j) {
        if (!mymap[j]) break;
      }
      if (j == 10) printf("%05d / %05d = %d\n", i*n, i, n);
    }
  }
}

int main(void) {
  freopen("7.1.1.in", "r", stdin);
  init();
  return 0;
}

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

comments powered by Disqus