解题思路:
本题在一开始我还考虑了是不是能有动态规划解,结果是我想多了,直接枚举即可,枚举所有1-9可能的组合形式,然后用运算符去分割,与结果匹配即为一种方案,但要注意枚举范围,不要超时。
注意事项:
1. 对于全排列可以使用dfs或者next_permutation库函数
参考代码:
#include <iostream> #include <algorithm> using namespace std; int N; int res = 0; int arr[] = { 1,2,3,4,5,6,7,8,9 }; int getNum(int s, int e, int* arr) { int ans = 0; for (int i = s; i <= e; i++) { ans = ans * 10 + arr[i]; } return ans; } int length(int n) { int len = 0; while (n) { len++; n /= 10; } return len; } int main() { while (cin >> N) { res = 0; do { for (int i = 0; i <= length(N); i++) { for (int j = i; j < 8; j++) { if (j - i < 8 - j) { continue; } int a = getNum(0, i, arr); int b = getNum(i + 1, j, arr); int c = getNum(j + 1, 8, arr); if (b%c == 0 && a + b / c == N) { res++; //cout << a << " + " << b << "/" << c << endl; } } } } while (next_permutation(arr, arr + 9)); cout << res << endl; } return 0; }
0.0分
6 人评分
C二级辅导-公约公倍 (C语言代码)浏览:2158 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:1045 |
C语言程序设计教程(第三版)课后习题8.4 (Java代码)浏览:788 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:783 |
大小写转换 (C语言代码)浏览:904 |
WU-复数求和 (C++代码)浏览:2119 |
Cylinder (C语言描述,蓝桥杯)浏览:1279 |
简单的a+b (C语言代码)浏览:1024 |
C二级辅导-等差数列 (C语言代码)浏览:806 |
数列问题 (C语言代码)浏览:1068 |