小弟的问题是可以描述为:
   现在有编号为1-20的20类不同的苹果,每次从这20类只取一个,(注意每种类型苹果个数不限)允许类型重复,
   现在取上10次,要求取到的苹果的所有类型为一确定数,如8种,或者在一个区间上,如为5-8种。注意,是在取了10次的基础上。
   然后还有一个随机数问题:
   在上面的基础上,我现在已经有了10个苹果,他们的编号允许存在重复。现在分3次拿走完,每次拿若干个,怎样确定拿走的的苹果的编号?    

解决方案 »

  1.   


    import java.util.*;public class Apple {
    public static void main(String[] args) {
    Random rd = new Random();
    List<Integer> apples = new ArrayList<Integer>();

    //随机生成取出的苹果的编号,并放入集合apples,也就是模拟题目中
    //取苹果的操作。
    int num;
    for(int i=0; i<10; i++) {
    num = rd.nextInt(20) + 1;//加1是为了防止出现编号为0的苹果
    apples.add(num);
    }

    //第一次拿走苹果后,就从集合中删除,第二次从剩下的苹果中拿,
    //第三次把剩下的全部拿走
    int count;//拿走的苹果的编号
    int[] arr = new int[apples.size()];//保存每一次拿走的苹果编号
    int k;
    for(int i=0; i<3; i++) {
    if(i < 2) {//前两次拿苹果
    num = rd.nextInt(apples.size() - 1);
    for(int j=0; j<num; j++) {
    count = rd.nextInt(num);
    arr[j] = count;
    System.out.println("第" + (i + 1) + "次拿出的苹果:" + apples.get(count)); //打印拿走的苹果编号
    }
    k = 0;
    while(arr[k] != 0) {
    apples.remove(arr[k]); //一次拿完后,从集中删除
    k++;
    }
    } else {//第三次拿走剩下的苹果
    for(int j=0; j<apples.size(); j++) {
    count = apples.size() - 1;
    System.out.println("第3次拿出的苹果:" + apples.get(count));
    apples.remove(count);
    }
    }
    }
    }
    }这个应该能够满足楼主的需求!