?思路:1.深度枚舉所有排列情況
? ? ? ? ? ? 2.設置為每個排列設置兩個斷點,分為三部分:a,b,c
? ? ? ? ? ? 3.轉換為乘法判斷條件,滿足加一
代碼如下:(可用next_permutation全排列函數代替dfs)?
#include<iostream>
#include<stdio.h>
using namespace std;
int ans = 0;int visit[11] = { 0 };int arr[11] = { 0 }, k = 0;int tonum(int l, int r) {//將num數組的第l至r個數轉為一個數int re = 0;for (int i = l; i <r; i++) {re = re * 10 + arr[i];}return re;
}void dec();void dfs();int l = 0;int main()
{scanf("%d", &l);dfs();cout << ans << endl;return 0;
}
void dfs()
{for (int i = 1; i <= 9; i++){if (!visit[i]){visit[i] = 1;arr[k++] = i;dfs();if (k == 9) dec();k--;visit[i] = 0;}}
}void dec()
{for (int i = 1; i <= 7; i++){ int a = tonum(0, i);for (int j = i; j <= 8; j++){int b = tonum(i, j);int c = tonum(j, 9);if ((l - a) * c == b) {ans++;}}}
}
??