1.要一步步来,首先,我知道1~9这样可以全排列,用next_permutation(a+1,a+9+1)
2.怎么断点呢,反正每次给的新的全排列是新的嘛,我们每次只用从头按这个顺序取数就行了,只是之前取得数还要进位,注意最后一个数要一次性取完
3.还要防止全排列一直在循环,检查就是检查是否是第一次全排列,人为规定顺序所以还是很好查的
4.一个易错点,因为int/int出现小数点会被截断,所以必须检查y是不是整除以z
#include<bits/stdc++.h>
using namespace std;
int a[10]={0,1,2,3,4,5,6,7,8,9};
int main()
{
int ans=0;
int n;
cin>>n;
while(1)
{
int x=0;
for(int i=1;i<=7;i++)//
{
x=x*10+a[i];
int y=0;
for(int j=i+1;j<=8;j++)
{
y=y*10+a[j];
int z=0;
for(int k=j+1;k<=9;k++)
{
z=z*10+a[k];
}
if(y%z==0&&x+y/z==n)//
{
ans++;
}
}
}
next_permutation(a+1,a+9+1);//
bool isok=1;//
for(int i=1;i<=9;i++)
{
if(a[i]!=i)
{
isok=0;
break;
}
}
if(isok) break;
}
cout<<ans;
}