排列组合的C,Java,JavaScript实现
题目源自: Linux C编程一站式学习的习题
欢迎拍砖~
c版
#include <stdio.h>#define N 5#define M 5#define IS_COMBINATION 1int arr[N];void printArr(void){int j = M,i ;if(IS_COMBINATION){for(i=0;i<M-1;i++){if(arr[i]>arr[i+1])return;}}for(i=0;i<j;i++){printf("%d ",arr[i]);}printf("\n");}void swap(int i , int j){int temp = arr[i];arr[i]=arr[j];arr[j]=temp;}void permutation(int k){int i = N-k;if(k==N-M){printArr();return;}for(;i<N;i++){swap(N-k,i);permutation(k-1);swap(N-k,i);}}int main(void){int i = 0 ;for(;i<N;i++ ){arr[i]=i+1;}permutation(N );return 0;}?
?
java版
static int N = 5,M=3;static boolean IS_COMBINATION = false;static int[] arr = new int[N];static void print(){if(IS_COMBINATION){ for(int i=0;i<M-1; i++){ if(arr[i]>arr[i+1]){ return; } } }System.out.println(Arrays.toString(Arrays.copyOfRange(arr, 0, M)));}static void swap(int i , int j){arr[i]=arr[j]+0*(arr[j]=arr[i]);}static void permutation(int k){if(k==N-M){print();return;}for (int i = N-k; i < N; i++) {swap(i, N-k);permutation(k-1);swap(i, N-k);}} public static void main(String[] args) {for (int i = 0; i < N; i++) {arr[i]=i+1;}permutation(N);}?
?
javascript版
var N = 5,M = 1 , IS_COMBINATION = true ;var arr = [] ;for(var i = 0 ; i<N ;i++){ arr[i]=i+1;}var print = function(){ if(IS_COMBINATION){ for(var i=0;i<M-1; i++){ if(arr[i]>arr[i+1]){ console.log(arr); return; } } } console.log(arr.slice(0,M));}var swap = function(i,j){ arr[i]=arr[j]+0*(arr[j]=arr[i]);}var permutation = function(k){ if(k==N-M){ print(); return; } for(var i = N-k ; i< N ; i++){ swap(N-k,i); permutation(k-1); swap(N-k,i); }}permutation(N);?
?