1. 程式人生 > 其它 >給定M個整數,輸出所有的排列組合情況

給定M個整數,輸出所有的排列組合情況

//程式思想:每次兩個數兩兩交換,輸出一組結果,再換回去成為原始的順序 
//遞迴思想:對m個數排列組合可拆解為固定最後一個數,對前m-1個排列組合,然後讓第1個數與第m個數交換位置 
#include <stdio.h>

#define MAX 20

int c[MAX] = {0};
int M, N ;

void print();
void comp(int);

int main()
{
	int i;
    printf("Please input  M = ");
    scanf("%d", &M);
    printf("M = %d\n", M);

//對M個整數進行初始化 
	for(i = 0;i < M;i++)
		scanf("%d",c+i);
		
		 
    comp(M);

    return 0;
}
void print()
{
    int i;
    
    for (i = 0; i < M; i++)
    {
        printf("%d", c[i]);
    }
    printf("\n");
}
void comp(int m)
{
	int i,temp; 
    if (m == 1)
    {
        print(); 
		return;   
    }
    comp(m - 1);
	 

    for (i = 0;i < m-1; i++) 
    {
    	temp = c[i];//交換兩個數,並輸出結果 
    	c[i] = c[m-1];
    	c[m-1] = temp;
    	comp(m-1);
    	//將兩個數交換回去,再接著迴圈  
		c[m-1] =c[i];	
	    c[i] = temp;       
    }    
}

執行結果:
在這裡插入圖片描述