用概率的思想:
1。如果数字中没有重复的数字:n个数字,n个位置,每个位置上都有n种数字出现的可能(不同位置上的数字可以重复),共有n的n次方中可能。
2。如果数字中有重复的数字:m个数字,n各位置(m<n),可能是m的n次方。
程序:
int a[1000];
//循环读入给定的多为数(逐位的读入),存入到a[10]中,如果a[]中存在,不插入到a[]中,如果不存
//在,插入到a[]中
int temp;//要输出的数字
int m;//数字的个数
int n;//数字的位数
// m,n可以重以上的循环读入中计算出来
//

解决方案 »

  1.   

    求结果容易但是显示出来就难了
    要是没有重复数字的情况下可以用Pn(还是Cn)了,忘记了.
      

  2.   

    你的意思是不是这样: 有n个互不相同的数,如1,2,3,..............n.每次取n个数中的一个,即概率中的有放入的摸球模型。那不有 n的n次方个数吗,即n×n×n×n......................n,(总共有n个)。
    如果是这样的话,可以设置n个一位数组(或者n×n的二维数组)。例如n=3的情况。总共有27种可能。程序如下:public class shuchu
    {
    public static void main(String args[])
    {
    char x[]={'1','2','3'};
    char y[]={'1','2','3'};
    char z[]={'1','2','3'};
    int i=0;
    int j=0;
    int k=0;
    int num=1;
    for(i=0;i<3;i++)
    {
      for(j=0;j<3;j++)
      {
        for(k=0;k<3;k++)
        {
           System.out.println(String.valueOf(num++)+"    "+x[i]+y[j]+z[k]);
        }
      }
      
            }
    }
    }
      

  3.   

    用多重循环不行吗?
    for (  i = 1 -> 3 ){
      for (  j = 1 -> 3 ){
        for (  k = 1 -> 3 ){
          print(Integer.parseInt(i+""+j+""+k+""))
        }
      }
    }
    取出这个数每位的数,可以先把它变成String的,
    然后再一位一位地去不就行了。我这个方法比较笨吧!嗬嗬good luck
      

  4.   

    ideal2004(小青莲居士) 的程序作一个判断,如果想等就不输出,这样就可以得到结果
      

  5.   

    蛮好玩,需要的存数据的话把result的类型对应处理一下用个arraylist什么的就可以了。public class Untitled2 {    private int[] base;
        public Untitled2(int count) {
            base = new int[count];
            for (int i = 0; i < count; i++) {
                base[i] = (int)Math.pow( 10, i );
            }    }    /**
         *
         */
        public static void main(String[] args) {        int[] source = new int[]{1,2,3};
            int[] result = new int[]{0};
            Untitled2 t = new Untitled2(source.length);
            t.get( source,result,0 );
        }    public void get( int[] source, int[]result, int index ){
            for (int i = 0; i < source.length; i++) {
                result[0] += source[i] * base[source.length-1-index];
                if( index < source.length - 1 ){
                    index++;
                    get( source, result, index );
                    index--;
                    result[0] -= source[i] * base[source.length-1-index];
                } else {
                    System.out.println(result[0]);
                    result[0] -= source[i]*base[source.length-1-index];
                }
            }    }
    }
      

  6.   

    好像可以用递归算法阿。设置n个数组(n为数字的位数),每个数组有n个一位数,第一个数组中是第一位数字(n个元素全部是第一位数字),第二个是第二位,,再设置一个n个元素的数组,每个元素表示目前使用到第几位了,如:flag[3] = 2表示第四个数组已经使用了前三个了,然后开始。
    addtosort(n,y) {
      while (flag[n] < n){
        if (排序数字不到n位){
          addtosort(n,y);    
        }
      }
    }
    写的仅仅是大概。
      

  7.   

    不要想用for的方法
    因为数组的长度是不定的.不少人都是for3下.万一数组长度是4,5呢?