c全排列演算法
① 一個C語言全排列的演算法。 比如,輸入3,則將123的全排列全部輸出:123,132,213,231
#include
main()
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9,n,t=0;
scanf("%d",&n);
for(a1=1;a1<=n;a1++)
if(n==1){printf("%d\n",a1);t=t+1;}
else
for (a2=1;a2<=n;a2++)
if(a2!=a1)
{if(n==2) {printf("%d%d\n",a1,a2);t=t+1;}
else
for (a3=1;a3<=n;a3++)
if(a3!=a2&&a3!=a1)
{if(n==3) {printf("%d%d%d\n",a1,a2,a3);t=t+1;}
else
for (a4=1;a4<=n;a4++)
if(a4!=a3&&a4!=a2&&a4!=a1)
{if(n==4) {printf("%d%d%d%d\n",a1,a2,a3,a4);t=t+1;}
else
for (a5=1;a5<=n;a5++)
if(a5!=a4&&a5!=a3&&a5!=a2&&a5!=a1)
{if(n==5) {printf("%d%d%d%d%d\n",a1,a2,a3,a4,a5);t=t+1;}
else
for (a6=1;a6<=n;a6++)
if(a6!=a5&&a6!=a4&&a6!=a3&&a6!=a2&&a6!=a1)
{if(n==6) {printf("%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6);t=t+1;}
else
for (a7=1;a7<=n;a7++)
if(a7!=a6&&a7!=a5&&a7!=a4&&a7!=a3&&a7!=a2&&a7!=a1)
{if(n==7) {printf("%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7);t=t+1;}
else
for (a8=1;a8<=n;a8++)
if(a8!=a7&&a8!=a6&&a8!=a5&&a8!=a4&&a8!=a3&&a8!=a2&&a8!=a1)
{if(n==8) {printf("%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);t=t+1;}
else
for (a9=1;a9<=n;a9++)
if(a9!=a8&&a9!=a7&&a9!=a6&&a9!=a5&&a9!=a4&&a9!=a3&&a9!=a2&&a9!=a1)
{if(n==9) {printf("%d%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8,a9);t=t+1;}
}
}
}
}
}
}
}
}
printf("共有%d種\n",t);
getchar();getchar();
}
自己辛辛苦苦寫的,用dev c運行成功
② 關於全排列的演算法問題
最低0.27元/天開通網路文庫會員,可在文庫查看完整內容>
原發布者:ON9V4Xr2gU9J7
全排列以及相關演算法在程序設計過程中,我們往往要對一個序列進行全排列或者對每一個排列進行分析。全排列演算法便是用於產生全排列或者逐個構造全排列的方法。當然,全排列演算法不僅僅止於全排列,對於普通的排列,或者組合的問題,也可以解決。本文主要通過對全排列以及相關演算法的介紹和講解、分析,讓讀者更好地了解這一方面的知識,主要涉及到的語言是C和C++。本文的節數:1.全排列的定義和公式:2.時間復雜度:3.列出全排列的初始思想:4.從第m個元素到第n個元素的全排列的演算法:5.全排列演算法:6.全排列的字典序:7.求下一個字典序排列演算法:8.C++STL庫中的next_permutation()函數:(#include)9.字典序的中介數,由中介數求序號:10.由中介數求排列:11.遞增進位制數法:12.遞減進位制數法:13.鄰位對換法:14.鄰位對換法全排列:15.鄰位對換法的下一個排列:16.鄰位對換法的中介數:17.組合數的字典序與生成:由於本文的,內容比較多,所以希望讀者根據自己的要求閱讀,不要一次性讀完,有些章節可以分開讀。第1節到第5節提供了全排列的概念和一個初始的演算法。第6節到第8節主要講述了字典序的全排列演算法。第9到第10節講了有關字典序中中介數的概念。第11到第12節主要介紹了不同的中介數方法,僅供擴展用。第13節到15節介紹了鄰位對換法的全排的有關知識。16節講了有關鄰位對換法的中介數,僅供參考。第17節講了
③ 求一個C語言全排列的演算法。 比如,輸入3,則將123的全排列全部輸出:123,132,213,231,312,321.
#include
main()
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9,n,t=0;
scanf("%d",&n);
for(a1=1;a1<=n;a1++)
if(n==1){printf("%d\n",a1);t=t+1;}
else
for (a2=1;a2<=n;a2++)
if(a2!=a1)
{if(n==2) {printf("%d%d\n",a1,a2);t=t+1;}
else
for (a3=1;a3<=n;a3++)
if(a3!=a2&&a3!=a1)
{if(n==3) {printf("%d%d%d\n",a1,a2,a3);t=t+1;}
else
for (a4=1;a4<=n;a4++)
if(a4!=a3&&a4!=a2&&a4!=a1)
{if(n==4) {printf("%d%d%d%d\n",a1,a2,a3,a4);t=t+1;}
else
for (a5=1;a5<=n;a5++)
if(a5!=a4&&a5!=a3&&a5!=a2&&a5!=a1)
{if(n==5) {printf("%d%d%d%d%d\n",a1,a2,a3,a4,a5);t=t+1;}
else
for (a6=1;a6<=n;a6++)
if(a6!=a5&&a6!=a4&&a6!=a3&&a6!=a2&&a6!=a1)
{if(n==6) {printf("%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6);t=t+1;}
else
for (a7=1;a7<=n;a7++)
if(a7!=a6&&a7!=a5&&a7!=a4&&a7!=a3&&a7!=a2&&a7!=a1)
{if(n==7) {printf("%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7);t=t+1;}
else
for (a8=1;a8<=n;a8++)
if(a8!=a7&&a8!=a6&&a8!=a5&&a8!=a4&&a8!=a3&&a8!=a2&&a8!=a1)
{if(n==8) {printf("%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8);t=t+1;}
else
for (a9=1;a9<=n;a9++)
if(a9!=a8&&a9!=a7&&a9!=a6&&a9!=a5&&a9!=a4&&a9!=a3&&a9!=a2&&a9!=a1)
{if(n==9) {printf("%d%d%d%d%d%d%d%d%d\n",a1,a2,a3,a4,a5,a6,a7,a8,a9);t=t+1;}
}
}
}
}
}
}
}
}
printf("共有%d種\n",t);
getchar();getchar();
}
自己辛辛苦苦寫的,用dev c運行成功