从0 – 9 十个数字中取数字,要求每次取出的值是随机的,取十次且十次取到的值没有相同的,有什么好的算法可以实现啊?请高手指教。

解决方案 »

  1.   

    定义一个动态数组,先放从0到9的十个数值,假设为A数组。第一次用随机函数在0-9间随机取一个值,去取A[X]或者A(X)(看你用什么语言了),取完再把这个元素删除掉,其后面的元素提前(最好用有自动调整功能的数组对象)。第二次用随机函数在0-8间随机取一个值,去取A[X]或者A(X)

    最后取剩下的最后一个元素即可。
      

  2.   

    import   java.util.Random;   
      import   java.util.Arrays;   
      public   class   RadomInts{   
          public   int[]   getInts(int   MAX,int   NEED){   
              int[]   ints=new   int[MAX];   
              int[]   returnInts=new   int[NEED];   
              //产生整数序列   
              for(int   i=1;i<=MAX;i++){   
                  ints[i-1]=i;   
              }     
              int   temp;   
              int   t1;   
              int   t2;   
              Random   a=new   Random();   
              for(int   i=0;i<MAX/3;i++){     
                  t1=a.nextInt(MAX);   
                  t2=a.nextInt(MAX);   
                  temp=ints[t1];ints[t1]=ints[t2];ints[t2]=temp;   
                    
              }   
              for(int   i=0;i<NEED;i++){   
                  returnInts[i]=ints[i];   
              }   
              Arrays.sort(returnInts);   
              return   returnInts;   
          }   
      }   
      

  3.   

    Vector v = new Vector();
    for (int i = 0; i < 10; i++) {
    v.addElement("" + i);
    }
    Random r = new Random();
    int index = -1;
    for (int i = 9; i > 0; i--) {
    index = Math.abs(r.nextInt()) % i;
    System.out.println(v.elementAt(index));
    v.removeElementAt(index);
    }
    System.out.println(v.elementAt(0));
    v.removeElementAt(0);]
      

  4.   

    Vector v = new Vector();
    for (int i = 0; i < 10; i++) {
    v.addElement("" + i);
    }
    Random r = new Random();
    int index = -1;
    for (int i = 9; i > 0; i--) {
    index = Math.abs(r.nextInt()) % (i + 1);
    System.out.print(v.elementAt(index) + " ");
    v.removeElementAt(index);
    }
    System.out.println(v.elementAt(0));
    v.removeElementAt(0);
      

  5.   

    import java.util.LinkedList;
    import java.util.Random;public class RandomTest {
    public static void main(String[] args){
    LinkedList<Integer> list=new LinkedList<Integer>();
    for(int i=0;i<=9;i++){
    list.add(i);
    }
    for(int i=10;i>0;i--){
    Random rand=new Random();
    double randNumber=rand.nextDouble();
    int n=(int)(randNumber*i);
    System.out.println(list.get(n));
    list.remove(n);
    }
    }
    }
      

  6.   

    另一种算法
    import java.util.*;public class ShuffleTest {
    public static void main(String[] args){
    ArrayList<Integer> list=new ArrayList<Integer>();
    for(int i=0;i<=9;i++)
    list.add(i);
    Collections.shuffle(list,new Random());
    for(int i=0;i<10;i++)
    System.out.println(list.get(i));
    }
    }