蓝桥集训之带分数
-
核心思想:递归 + 暴力
- 因为就一个数 暴力就行了
- 1 - 9全排列 然后双指针ij分割成三部分 判断条件
-
#include<iostream> #include<cstring> using namespace std; const int N = 10; int num[N]; int target,res; bool st[N]; int calc(int l,int r) //计算一段的数值(全排列) { int cnt=0; for(int i=l;i<=r;i++) { cnt = cnt*10 + num[i]; } return cnt; } int dfs(int u) { if(u == 9) //全排列完成 所有数都用过了 { for(int i=0;i<7;i++) //分割三部分 { for(int j=i+1;j<8;j++) { int a = calc(0,i); int b = calc(i+1,j); int c = calc(j+1,8); if(a * c + b == c * target) res ++; //因为除法是整除 所以转化为加减乘 } } } for(int i=1;i<=9;i++) //九个数遍历一遍 { if(!st[i]) //没用过 { st[i] = true; num[u] = i; dfs(u+1); //递归 st[i] = false; //恢复现场 } } return res; } int main() { cin>>target; cout<<dfs(0)<<endl; return 0; }