1209. 带分数
题意描述:100可以表示为带分数的形式:100 = 3 + 69258/714
特征:带分数中,数字 1∼9分别出现且只出现一次(不包含 0);
求输入的正整数有多少种表示法;
递归+枚举:
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int n,ans = 0;
int num[10];
bool vis[10];
int cal(int l,int r){
int ans=0;
for(int i=l ;i<= r;i++) ans= ans*10+num[i];
return ans;
}
void DFS(int 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(a*c+b==c*n) ans++;
}
}
return ;
}
for(int i=1;i<=9;i++){
if(!vis[i]){
vis[i] = true;
num[u] = i;
DFS(u+1);
vis[i] = false;
}
}
return ;
}
int main()
{
cin>>n;
DFS(0);
cout<<ans<<endl;
return 0;
}
非递归:
使用全排列函数:next_permutation();