我要从数组中随机取一个数,当再次运行要在剩下的数中 随机取一个,请问该怎么做,怎么能把已经取了的数 从数组中去掉

解决方案 »

  1.   

     while(i < 7){
        lottery[i] = rand() % 10;
        for(j = 0; j < i; j++){
          if(lottery[j] == lottery[i]){
            break;
          }
        }
        if(j == i){
          i++;
        }
      }c语言中的小算法,随机取到不同的数,并不是真正的去除已经选中的数
    还有一个方法,我再找找我以前写的
      

  2.   

      for(i = 0; i < N; i++){
        num[i] = i + 1;
      }  for(j = N; j > N - 7; j--){
        i = (int)(rand() % j);
        printf("%d ", num[i]);
        num[i] = num[j - 1];
      }N是数组中输入的个数,随机取7个不同的数
    取到一个就让最后的一个数覆盖掉已经取到的数算法是这样的,楼主可以改一下
      

  3.   

    要去除项目的话,用数组不太好
    能不能改用LINKEDLIST
    采用LIST的话,相对删除部分数据教为方便
      

  4.   

    import java.util.Arrays;
    import java.util.Random;/**
     * <code>RandomUtil</code> - Random Tool Class.
     * @author SageZk
     * @version 1.3
     */
    public class RandomUtil {    private RandomUtil() { /*禁止创建此类的实例*/ }    private static volatile Random rnd = null;  //随机数发生器 1.3 加上了 volatile    /**
         * 初始化随机数发生器。
         */
        private static synchronized void initRnd() {
            if (rnd == null) rnd = new Random();  //1.2 提高了多线程访问的安全性
        }    /**
         * 计算并返回无重复值的以 <code>min</code> 为下限 <code>max</code> 为上限的
         * 随机整数数组。其中 min ~ max 之间整数被抽中的概率相等。
         * @param min 随机整数下限(包含)
         * @param max 随机整数上限(包含)
         * @param len 结果数组长度
         * @return 结果数组
         */
        public static int[] getLotteryArray(int min, int max, int len) {
            //参数校验及性能优化
            if (len < 0) return null;  //长度小于 0 的数组不存在
            if (len == 0) return new int[0];  //返回长度为 0 的数组
            if (min > max) {  //校正参数 min max
                int t = min;
                min = max;
                max = t;
            }
            final int LEN = max - min + 1;  //种子个数
            if (len > LEN) return null;  //如果出现 35 选 36 的情况就返回 null
            //Bug#1: if (len == 1) return new int[] {min};  //即 min == max 的情况
            //Bug#1: 1.1 版本修复
            //计算无重复值随机数组
            //1.2 提高了多线程访问的安全性和性能
            if (rnd == null) initRnd();  //初始化随机数发生器
            int[] seed = new int[LEN];  //种子数组
            for (int i = 0, n = min; i < LEN;) seed[i++] = n++;  //初始化种子数组
            for (int i = 0, j = 0, t = 0; i < len; ++i) {
                j = rnd.nextInt(LEN - i) + i;
                t = seed[i];
                seed[i] = seed[j];
                seed[j] = t;
            }
            return Arrays.copyOf(seed, len);  //注意:copyOf 需要 JRE1.6
        }    //Unit Testing
        public static void main(String[] args) {
            final int N = 10000;  //测试次数
            for (int i = 0; i < N; ++i) {
                int[] la = RandomUtil.getLotteryArray(1, 35, 7);
                if (la == null) continue;
                for (int v : la) System.out.printf("%0$02d ", v);
                System.out.println();
            }
        }}参见:http://blog.csdn.net/sagezk/archive/2008/07/16/2660982.aspx