- 题目链接:杨老师游戏
- 题目分析:将9个数字分成3块,分块枚举,话句话说,9个数字的所有排列组合,如果满足N=a*b-c就是一个答案,暴力枚举Orz.
- 代码如下:
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 }
新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)-B-杨老师游戏
猜你喜欢
转载自www.cnblogs.com/FlyerBird/p/9004488.html
今日推荐
周排行