本文目錄一覽:
- 1、c語言,函數全排列,求代碼,如圖?
- 2、遞歸全排列 c語言 看不懂
- 3、c語言全排列遞歸問題
- 4、C語言的全排列問題!急!
- 5、c語言中幾個數組成的數的全排列用什麼函數
- 6、求C語言按字典序輸出全排列的方法? 如求1到8的全排列,a到f的全排列
c語言,函數全排列,求代碼,如圖?
#include stdio.h
char c,s[10];
int n;
void pern(int k)
{int i;
if(k==n)
printf(“%s\n”,s+1);
else
for(i=k;i=n;i++)
{c=s[k];s[k]=s[i];s[i]=c;
pern(k+1);
c=s[k];s[k]=s[i];s[i]=c;
}
}
int main()
{ int i;
scanf(“%d”,n);
for(i=1;i=n;i++)
s[i]=’0’+i;
pern(1);
return 0;
}
遞歸全排列 c語言 看不懂
perm(list,i,j)是一個全排列函數,拿你上面的列子來說:
perm(list,0,5)意思是數組list的前6個數(第0個數到第5個數)的所有排列,它細分的話就等於:第0個數和第1個數互換以後的perm(list,1,5) 第0數和第2數互換perm(list,1,5) ….第0數和第5數互換的perm(list,1,5) 和它本身的所在0位置的perm(list, 1, 5)
如假如6個數是1 2 3 4 5 6
他們的排列就 * * * * * * perm(list,0,5)
1 * * * * * perm(list,1,5)
2 * * * * * perm(list,1,5)
3 * * * * * perm(list,1,5)
4 * * * * * perm(list,1,5)
5 * * * * * perm(list,1,5)
6 * * * * * perm(list,1,5) 就是每一個數都在第0個位置上面都出現一次以後的排列總和。 也就是它的for循環的意思
這只是形象的比喻一下
c語言全排列遞歸問題
可以輸出所有的排列,i和n表示排列的起始點和終止點比如說要排列”abcd”起點就是0,終點是3,perm(「abcd」,0,3)就可以了。
C語言的全排列問題!急!
這其實是一個遞歸
遞歸函數
意思是這樣的
比如有n個數
1
2.。。。n
把1
從第一個開始
往後
與每個數開始交換
然後
第一個數就算定了
後面的
第2個到第n個當成一個整體
再進行這個函數遞歸
也就是說
第二個到第n個進行全排列
這樣下去
當全排列到最後一組數
即第n個數一個的時候
遞歸退出條件就出來了
就可以輸出全排列的值了
當然
最後別忘記把交換的數還原
再進行下一次交換
遞歸哦
所以最後一局的交換也是很重要的
聽完我的解釋
再好好琢磨一下
相信你一定會明白的
要是還是不懂可以繼續追問我
c語言中幾個數組成的數的全排列用什麼函數
C語言中沒有吧?C++中倒是有一個:
next_permutation(array,array+arrlength)
使用的頭文件是#include algorithm
示例:
#include iostream
#include algorithm /// next_permutation, sort
using namespace std;
int main () {
int myints[] = {1,2,3,1};
sort (myints,myints+4);
do {
cout myints[0] ‘ ‘ myints[1] ‘ ‘ myints[2] ‘ ‘ myints[3]’\n’;
} while ( next_permutation(myints,myints+4) ); ///獲取下一個較大字典序排列
cout “After loop: ” myints[0] ‘ ‘ myints[1] ‘ ‘ myints[2] ‘ ‘ myints[3] ‘\n’;
return 0;
}
求C語言按字典序輸出全排列的方法? 如求1到8的全排列,a到f的全排列
寫了一個模板函數,能兼容字元和數字的輸出。
#includeiostream
using namespace std;
template class T
void swap(T num[], int i, int j)
{
if(i != j)
{
T tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
template class T
void print(T num[], int n, int i)
{
if(i == n)
{
for(int i = 0; i n; i++)
{
coutnum[i]” “;
}
coutendl;
}
else
{
for(int j = i; j n; j++)
{
swap(num, i, j);
print(num, n, i + 1);
swap(num, j, i);
}
}
}
int main()
{
//字母
char str[27] = {0};
for(int i = 0; i 26; i++)
{
str[i] = ‘a’ + i;
}
printchar(str, 3, 0);
//數字
int num[9] = {0};
for(int i = 0; i 9; i++)
{
num[i] = i;
}
printint(num, 9, 0);
return 0;
}
原創文章,作者:RCAW,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/142870.html