當前位置:成語大全網 - 新華字典 - C語言遞歸實現字典順序枚

C語言遞歸實現字典順序枚

/*本程序排列5個數字,每次輸入壹個。*/

/*所有的全排列程序都是壹樣的,請參照本程序以及其中的提示修改。*/?

#include<stdio.h>

main()

{

int?ar[5],i,m,n;/*註意改變數組。i、m、n都是循環控制變量。*/

int?t1,t2,temp,p;

for(i=0;i<=4;i++)/*註意控制輸入循環。*/

scanf("%d",&ar[i]);

for(i=0;i<=4;i++)/*註意控制輸出循環。*/

printf("%d",ar[i]);/*因為在字典序法中,這個數本身是不輸出的,所以先輸出來。*/

printf("\n");

while(1)

{

for(i=3;i>=0;i--)/*從倒數第二位找起。*/

if(ar[i]<ar[i+1])

{

p=i;

break;

}

t1=ar[p+1];

for(i=p+1;i<=4;i++)/*註意循環範圍大小需要改變。*/?

?if(ar[i]>ar[p]&&ar[i]<=t1)

?{

t1=ar[i];

t2=i;

?}

temp=ar[p];

ar[p]=ar[t2];

ar[t2]=temp;

for(m=p+1;m<4;m++)/*註意循環範圍大小需要改變。*/?

for(n=m+1;n<=4;n++)/*註意循環範圍大小需要改變。*/?

if(ar[m]>ar[n])

{

temp=ar[m];

ar[m]=ar[n];

ar[n]=temp;

}

for(i=0;i<=4;i++)/*註意循環範圍大小需要改變。*/?

printf("%d",ar[i]);

printf("\n");

if(ar[0]>ar[1]&&ar[1]>ar[2]&&ar[2]>ar[3]&&ar[3]>ar[4])/*寫到頭*/

break;

}

}

/*這其實是用字典序法求n個數字的全排列,妳可以根據本程序的提示修改。最後的那個if語句妳可以用循環來判斷是否已經從大到小排列。*/