新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)-B-杨老师游戏

  1. 题目链接:杨老师游戏
  2. 题目分析:将9个数字分成3块,分块枚举,话句话说,9个数字的所有排列组合,如果满足N=a*b-c就是一个答案,暴力枚举Orz.
  3. 代码如下: 
     1 #include<iostream>
     2 using namespace std;
     3 bool flag[10];
     4 int que[10];
     5 int ans, num;
     6 void check() {
     7     int Li, Lk, Lj, di, dj, i;
     8     for (di = 1; di < 9; ++di) {
     9         Li = 0;
    10         for (i = 1; i <= di; ++i) {
    11             Li = Li * 10 + que[i];
    12         }
    13         for (dj = 1; di + dj < 9; ++dj) {
    14             Lj = 0;
    15             for (i = di + 1; i <= di + dj; ++i) {
    16                 Lj = Lj * 10 + que[i];
    17             }
    18             Lk = 0;
    19             for (i = di + dj + 1; i < 10; ++i) {
    20                 Lk = Lk * 10 + que[i];
    21             }
    22             if (Li * Lj - Lk == num) {
    23                 ++ans;
    24             }
    25         }
    26     }
    27 }
    28 void dfs(int number) {
    29     if (number > 9) {
    30         check();
    31     }
    32     int i;
    33     for (i = 1; i < 10; ++i) {
    34         if (!flag[i]) {
    35             flag[i] = true;
    36             que[number] = i;
    37             dfs(number + 1);
    38             flag[i] = false;
    39         }
    40     }
    41 }
    42 int main()
    43 {
    44     cin >> num;
    45     dfs(1);
    46     cout << ans << endl;
    47     return 0;
    48 }

猜你喜欢

转载自www.cnblogs.com/FlyerBird/p/9004488.html
今日推荐