100 可以表示为带分数的形式:100 = 3 + 69258 / 714。
还可以表示为:100 = 82 + 3546 / 197。
注意特征:带分数中,数字1~9分别出现且只出现一次(不包含0)。
类似这样的带分数,100 有 11 种表示法。
1~9的全排列大概为3e5,然后分割方案数为36种(C29),复杂度大概为1e7,能接受。
所以我们可以直接用next_permutation暴力枚举1~9的所有全排列,然后分割成三个数,符合则加上即可。
- #include
- using namespace std;
- int a[10]={1,2,3,4,5,6,7,8,9};
- int ned;
- int get(){
- int x=0,y=0,z=0;
- int res=0;
- for(int i=0;i<7;i++){//第一个数所占的位数
- x=x*10+a[i];
- y=0;
- for(int j=i+1;j<8;j++){//第二个数所占的位数
- y=y*10+a[j];
- z=0;
- for(int k=j+1;k<9;k++){
- z=z*10+a[k];
- }
- if(y%z==0&&x+y/z==ned)res++;
-
- }
- }
- return res;
- }
- int main(){
- cin>>ned;
- int ans=0;
- do{
- ans+=get();
- }while(next_permutation(a,a+9));
- cout<
- }