AcWing 1209. 带分数
原题链接
简单
作者:
戾儿
,
2021-03-31 15:27:49
,
所有人可见
,
阅读 363
(递归)
C++ 代码
#include <bits/stdc++.h>
using namespace std;
int n,m,cnt;
const int N=1000001;
int a[N],st[N],num[N];
//思路 把九个数字全排列 之后隔板把九个数字分为三个数 判断三个数是否符合题意
int sum(int l,int r)//计算第l位到第r位的数字组成的数
{
int res=0;
for(int i=l;i<=r;i++)
{
res=res*10+num[i];
}
return res;
}
void dfs(int u)//u表示目前为止已经选择的数字个数
{
if(u==9)
{
for(int i=0;i<7;i++)//储存全排列的数组位置从0开始
{ //一定是三位数 则i<7
for(int j=i+1;j<8;j++)
{
int a=sum(0,i);
int b=sum(i+1,j);
int c=sum(j+1,8);
if(n*c-a*c==b) cnt++;
}
}
return ;//选择了9个数即返回
}
for(int i=1;i<10;i++)//枚举每个数字的使用情况
{
if(!st[i])
{
st[i]++;
num[u]=i;
dfs(u+1);
st[i]=0;//状态恢复
}
}
}
int main()
{
cin>>n;
dfs(0);
cout<<cnt<<endl;
return 0;
}