这道题的解法我想着的就是暴力枚举,但是我觉得肯定还有其他的解法,所以这里给出的就是一个大神的解法再加上自己的理解。
题解:
首先就是我们可以直接将给出的数组a[n]里面的数字看成是一个连续的,然后再在此基础上进行断点,同时利用next_permutation得出其全排序,但是要注意的是每次生成的都不能是一样的。
next_permutation(a+1,a+9+1);
直接看代码吧:
#include<bits/stdc++.h>
using namespace std;
int t ,n ,a[10]={0,1,2,3,4,5,6,7,8,9},ans;
int main(){
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 ok=0;
for(int i=1;i<=9;i++){
if(a[i]!=i){
ok=1;
break;
}
}
if(!ok) break;
}
cout<<ans;
return 0;
}
这道题之前一直编译失败我以为是我代码写错了,结果是一个分号打成中文的了,哭死!