3つの言語は36選7の全配列を実現します.

8413 ワード

java版
package com.swfml.test;

/**
 *    m  n      (m > n > 0)
 * <p>  :
 * <p> n             (  1 5 3    )
 * <p>1, 2, 3
 * <p>   
 * <p>5, 4, 3
 * @author SavageGarden
 *
 */
public class Test {
	/**
	 * M 
	 */
	public static int M = 5;
	/**
	 * N 
	 */
	public static int N = 4;
	/**
	 *     (    )      
	 */
	public static int[] arrayMin = new int[N];
	/**
	 *     (    )      
	 */
	public static int[] arrayMax = new int[N];
	/**
	 *      (    )      
	 */
	public static void initArrayMin() {
		for(int i = 0; i < N; i ++) {
			arrayMin[i] = i + 1;
		}
	}
	/**
	 *      (    )      
	 */
	public static void initArrayMax() {
		for(int i = 0; i < N; i ++) {
			arrayMax[i] = M - i;
		}
	}
	/**
	 *       (    )
	 * @param array
	 */
	public static void printArray(int[] array) {
		for(int i = 0; i < array.length; i ++) {
			System.out.print(array[i] + "\t");
		}
		System.out.println();
	}
	/**
	 *         (    )    
	 * @param array		  
	 * @param index		  
	 * @param value		  
	 * @return
	 */
	public static boolean checkExit(int[] array, int index, int value) {
		for(int i = 0; i <= index; i ++) {
			if(array[i] == value) {
				return true;
			}
		}
		return false;
	}
	/**
	 *     (    )            
	 * @param array
	 * @param index
	 * @return
	 */
	public static int getNextValue(int[] array, int index) {
		for(int i = 0; i < M; i ++) {
			if(!checkExit(array, index, i + 1)) {
				return i + 1;
			}
		}
		return 0;
	}
	/**
	 *     (    )    ,       (    )    
	 * @param array
	 * @param index
	 */
	public static int[] getNextArray(int[] array, int index) {
		int value = array[index] + 1;
		while(checkExit(array, index, value)) {
			value ++;
		}
		if(value <= M) {
			array[index] = value;
			if(index < N - 1) {
				while(index < N - 1) {
					value = getNextValue(array, index);
					index ++;
					array[index] = value;
				}
			}
			return array;

		} else {
			index--;
			if(index == -1) {
				return null;
			}
			return getNextArray(array, index);
		}
	}
	public static void getAll() {
		initArrayMin();
		initArrayMax();		

		printArray(arrayMin);
		int[] temp;
		while((temp = getNextArray(arrayMin, N - 1)) != null) {
			printArray(temp);
		}
		printArray(arrayMax);
	}
	public static void main(String args[]) {
		getAll();
	}
}
 JavaScript版
<html>
	<body>
		<div id="message"/>
	</body>
</html>
<script>
	//M 
	var M = 5;
	//N 
	var N = 3;
	//    (    )      
	var arrayMin = new Array(N);
	//    (    )      
	var arrayMax = new Array(N);
	var message = "<textarea cols='100' rows='50'>";
	/**
	 *      (    )      
	 */
	function initArrayMin() {
		for(var i = 0; i < N; i ++) {
		     arrayMin[i] = i + 1;
		}	
	}
	/**
	 *      (    )      
	 */
	function initArrayMax() {
		for(var i = 0; i < N; i ++) {
			arrayMax[i] = M - i;
		}
	}
	/**
	 *       (    )
	 * @param array
	 */
	function printArray(array) {
		for(var i = 0; i < array.length; i ++) {
			message += array[i] + "\t";
		}
		message += "
"; } /** * ( ) * @param array * @param index * @param value * @return */ function checkExit(array, index, value) { for(var i = 0; i <= index; i ++) { if(array[i] == value) { return true; } } return false; } /** * ( ) * @param array * @param index * @return */ function getNextValue(array, index) { for(var i = 0; i < M; i ++) { if(!checkExit(array, index, i + 1)) { return i + 1; } } return 0; } /** * ( ) , ( ) * @param array * @param index */ function getNextArray(array, index) { var value = array[index] + 1; while(checkExit(array, index, value)) { value ++; } if(value <= M) { array[index] = value; if(index < N - 1) { while(index < N - 1) { value = getNextValue(array, index); index ++; array[index] = value; } } return array; } else { index--; if(index == -1) { return null; } return getNextArray(array, index); } } function getAll() { initArrayMin(); initArrayMax(); printArray(arrayMin); var temp; while((temp = getNextArray(arrayMin, N - 1)) != null) { printArray(temp); } message += "</textarea>"; document.getElementById("message").innerHTML = message; } getAll(); </script>
 C版
#include <stdio.h>
#define M 5
#define N 4
/*     (    )       */
int arrayMin[N];
/*     (    )       */
int arrayMax[N];
void initArrayMin();
void initArrayMax();
void printArray(int *array);
int checkExit(int *array, int index, int value);
int getNextValue(int *array, int index);
int *getNextArray(int *array, int index);
void getAll();
/*      (    )       */
void initArrayMin()
{
    int i;
    for(i = 0; i < N; i ++)
    {
        arrayMin[i]= i + 1;
    }
}
/*      (    )       */
void initArrayMax()
{
    int i;
    for(i = 0; i < N; i ++)
    {
        arrayMax[i] = M - i;
    }
}
/*       (    ) */
void printArray(int *array)
{
    int i;
    for(i = 0; i < N; i ++)
    {
        printf("%d\t", *(array + i));
    }
    printf("
"); } /* ( ) */ int checkExit(int *array, int index, int value) { int i; for(i = 0; i <= index; i ++) { if(*(array + i) == value) { return 1; } } return 0; } /* ( ) */ int getNextValue(int *array, int index) { int i; for(i = 0; i < M; i ++) { if(!checkExit(array, index, i + 1)) { return i + 1; } } return 0; } /* ( ) , ( ) */ int *getNextArray(int *array, int index) { int value = *(array + index) + 1; while(checkExit(array, index, value) == 1) { value ++; } if(value <= M) { *(array + index) = value; if(index < N - 1) { while(index < N - 1) { value = getNextValue(array, index); index ++; *(array + index) = value; } } return array; } else { index--; if(index == -1) { return NULL; } return getNextArray(array, index); } } void getAll() { initArrayMin(); initArrayMax(); printArray(arrayMin); int *temp; while((temp = getNextArray(arrayMin, N - 1)) != NULL) { printArray(temp); } } void main() { getAll(); }