蓝桥杯历届试题练习
搜索题,用上全排列next_permutation就不必写很烦很烦的搜索模拟了
另外,next_permutation(p,p+l);的返回值是bool型,
常用在
do{
}while(next_permutation(p,p+l));
这样的环境下,应该是当其值为0时,全排列一遍生成完毕。
它的排列顺序——例如,对“abc”而言,输出为:
abc
acb
bac
bca
cab
cba
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; int main(){ freopen("a.txt","r",stdin); int n,p[9],cnt=0,i,j,k,w,a,b,c; for(i=0;i<9;i++){ p[i]=i+1; } scanf("%d",&n); do{ for(i=1;i<8;i++){ for(j=(10-i)/2;j<9;j++){ for(w=1,b=p[j-1],k=j-2;k>=i;k--){ w*=10; b+=w*p[k]; } for(w=1,c=p[8],k=7;k>=j;k--){ w*=10; c+=w*p[k]; } if(b%c) continue; for(w=1,a=p[i-1],k=i-2;k>=0;k--){ w*=10; a+=w*p[k]; } if(a+b/c==n){ cnt++; } } } }while(next_permutation(p,p+9)); printf("%d\n",cnt); return 0; }