C++全排列练习(不用暴力那么麻烦)

    科技2024-07-08  66

    通过几个例题来练习

    过大年公式武汉交通

    过大年

    #include<iostream> #include<algorithm> using namespace std; int main() { int a[]={0,1,2,3,4,5,6,7,8,9}; do{ if(a[0]==0||a[3]==0) continue; long int s1=a[0]*1000000+a[1]*2*100000+a[2]*3*10000+a[3]*4*1000+a[4]*5*100+a[5]*6*10+a[6]*7; long int s2=a[3]*1111111;//没有必要一个一个加 if(s1==s2) { printf("%d%d%d%d%d%d%d\n",a[0],a[1],a[2],a[3],a[4],a[5],a[6]); } }while(next_permutation(a,a+10)); return 0; }

    运行结果

    公式

    12

    #include<iostream> #include<algorithm> using namespace std; int main() { int a[]={0,1,2,3,4,5,6,7,8,9}; do{ if(a[0]==0||a[1]==0||a[3]==0||a[5]==0) continue; int x1=a[0]; double x2=a[2]*1.0/a[1]; double x3=a[4]*1.0/a[3]; if((x1+x2*x3)==a[5]) { printf("%d+(%d~%d)+(%d~%d)=%d\n",a[0],a[2],a[1],a[4],a[3],a[5]); } }while(next_permutation(a,a+10)); return 0; }

    运行结果

    武汉交通

    12

    #include<iostream> #include<algorithm> using namespace std; int main() { int a[]={0,1,2,3,4,5,6,7,8,9}; do{ if(a[0]==0||a[2]==0||a[5]==0) continue; int x1=a[0]*1000+a[1]*100+a[2]*10+a[3]; int x2=a[2]*1000+a[3]*100+a[4]*10+a[5]; int x3=a[4]*1000+a[4]*100+a[6]*10+a[6]; if((x1+x2)==x3) { printf(" %d%d%d%d\n",a[0],a[1],a[2],a[3]); printf("+%d%d%d%d\n",a[2],a[3],a[4],a[5]); printf("-----------\n"); printf(" %d%d%d%d\n",a[4],a[4],a[6],a[6]); printf("*************************\n\n"); } }while(next_permutation(a,a+10)); return 0; }

    运行结果 其实记住这个模板就行 遇到全排列的题直接套很方便 再也不用暴力敲的那么累。

    Processed: 0.015, SQL: 8