/*先用深搜找出所有的1~9数字排列组合,对每一次排列组合结果划分为三个数字 例如第一次深搜结果为123456789,对其第一次划分1 2 3456789 计算1+2/3456789结果 第二次划分1 23 456789 计算1+23/456789 ………………*/ #include<iostream> using namespace std; int ans = 0; int v[10]; int sum[10]; double N; int change(int left, int right) { int num = 0; int temp = 1; int k = right - left; for (int i = left + k; i > left; i--) { num += sum[i] * temp; temp *= 10; } return num; } void judge() { int temp[9] = { 0,1,2,3,4,5,6,7,8 }; double k; for (int i = 1; i <= 7; i++) { for (int j = i + 1; j <= 8; j++) { k = change(0, i) + (change(i, j)*1.0 / change(j, 9)); if (N == k) ans++; } } } void dfs(int step) { if (step == 10) { judge(); return; } for (int i = 1; i < 10; i++) { if (v[i] == 0) { v[i] = 1; sum[step] = i; dfs(step + 1); v[i] = 0; } } } int main() { cin >> N; dfs(1); cout << ans; return 0; }
0.0分
3 人评分