[蓝桥杯][2013年第四届真题]带分数
思路
- 枚举\(1 \sim 9\)的全排序
- 枚举分界处的位置
时间复杂度:\(O(9! \times 9 \times C_8^3)\)
int path[10];
bool vis[10];
int n;
int ans;
void dfs(int u)
{
if(u == 9)
{
int a=0;
for(int i=0;i<7;i++)
{
a=a*10+path[i];
int b=0;
for(int j=i+1;j<8;j++)
{
b=b*10+path[j];
int c=0;
for(int k=j+1;k<9;k++)
c=c*10+path[k];
if(a*c+b == c*n) ans++;
}
}
return;
}
for(int i=1;i<=9;i++)
if(!vis[i])
{
vis[i]=true;
path[u]=i;
dfs(u+1);
vis[i]=false;
}
}
int main()
{
cin>>n;
dfs(0);
cout<<ans<<endl;
//system("pause");
return 0;
}
\(STL\)解法
int num[10];
int n;
int ans;
int main()
{
cin>>n;
for(int i=0;i<9;i++) num[i]=i+1;
do
{
int a=0;
for(int i=0;i<7;i++)
{
a=a*10+num[i];
int b=0;
for(int j=i+1;j<8;j++)
{
b=b*10+num[j];
int c=0;
for(int k=j+1;k<9;k++)
c=c*10+num[k];
if(a*c+b == c*n) ans++;
}
}
}while(next_permutation(num,num+9));
cout<<ans<<endl;
//system("pause");
return 0;
}