相关题目:
1209. 带分数 - AcWing题库https://www.acwing.com/problem/content/1211/
解题思路:
首先对1-9的数进行全排列,在全排列的途中,同时将该串数字分成三组。自处可以设置两个for循环。具体可见y总的解题思路。
相关代码:
#include<iostream>
using namespace std;
//首先要弄出1-9的全排列。
bool st[100];
int nums[100];
int target;
int count;
int cal(int l,int r){ //计算nums数组中一段数表示的具体的数。
int a=0;
for(int i=l;i<=r;i++){
a=a*10+nums[i];
}
return a;
}
void dfs(int u){ //u表示的是从u开始。
if(u==9){
//第一次执行完后,将数组中的数进行分组。
for(int i=0;i<7;i++){
for(int j=i+1;j<8;j++){
int a=cal(0,i);
int b=cal(i+1,j);
int c=cal(j+1,8);
if(target*c-a*c==b){
count++;
}
}
}
return;
}
for(int i=0;i<9;i++){
if(st[i]!=true){
st[i]=true;
nums[u]=i+1; //首先把一个数存到nums数组中。
dfs(u+1);
st[i]=false; //撤销选择,进行回溯。
}
}
}
int main(){
cin>>target;
dfs(0);
cout<<count;
return 0;
}