题目链接:带分数
题目大意:给你一个n,然后问你有多少种方法使得a+b/c等于n并且a,b,c分别由1到9的数字组成且数字出现且只出现一次
题目思路:用next_permutation去生成一下1到9的排列一个一个去判断就可以了,枚举加号和乘号出现的位置,感觉跑的速度还蛮快,而且代码量还极小,这道题还可以dfs写,不再赘述
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int n,a[9] = {1,2,3,4,5,6,7,8,9},cot = 0,x,y,z;
cin>>n;
while(next_permutation(a,a+9)){
for(int i = 0;i < 7;i++){
for(int j = i+1;j < 8;j++){
x = y = z = 0;
for(int k = i;k >= 0;k--)
x = x*10+a[k];
for(int k = j;k >= i+1;k--)
y = y*10+a[k];
for(int k = 8;k >= j+1;k--)
z = z*10+a[k];
if(y % z != 0) continue;
else if(x+y/z == n) cot++;
}
}
}
cout<<cot<<endl;
return 0;
}