蓝桥杯 历年真题 带分数(全排列切割)

题意:就是用1-9的数字表示这个公式,能否变为n。

思路:全排列,对每个排列切割两次判断处理。

发现要是用到1-9全排列(next_permutation(num,num+9));挺好使的

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int a[9]={1,2,3,4,5,6,7,8,9};
int n;
cin>>n;
int ans=0;
do{
int x,y,z;
for(int i=1;i<9;i++){

for(int j=i+1;j<9;j++){
x=y=z=0;
for(int k=0;k<9;k++){
if(k<i) x=x*10+a[k];
else if(k<j) y=y*10+a[k];
else z=z*10+a[k];

}
//cout<<x<<" "<<y<<" "<<z<<endl;
if(y%z==0){
int tmp=x+y/z;
if(tmp==n) ans++;
}
}
}
//cout<<ans<<endl;
}while(next_permutation(a,a+9));
printf("%d\n",ans);
return 0;
}