/*所有的全排列程序都是壹樣的,請參照本程序以及其中的提示修改。*/?
#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語句妳可以用循環來判斷是否已經從大到小排列。*/