全排列函數c語言,c++ 全排列函數

本文目錄一覽:

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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RCAW的頭像RCAW
上一篇 2024-10-14 18:44
下一篇 2024-10-14 18:44

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29

發表回復

登錄後才能評論