随机数做一个抽奖的,一等奖千分之1,二等奖百分之1,三等奖五分之1,其他不中奖,希望给段代码!

解决方案 »

  1.   

    int size=all.size();
    map<int, T> all;
    // init ...
    for (int i=0; i<size; ++i)
    {
      int idx=rand()%all.size();
      cout<<alist[idx]<<endl;
      alist.erase(idx);
    }
    // size/100
    // size/5
      

  2.   


    import java.util.*;
    public class TestRandom { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub

    int test = 1000;
    Hashtable result = getRandom(test);

    System.out.println("no1 is:"+result.get("no1").toString());
    System.out.println("no2 is:"+result.get("no2").toString());
    System.out.println("no3 is:"+result.get("no3").toString()); }

    static Hashtable getRandom(int arrange){
                    //保存抽奖结果的Hashtable
    Hashtable<String ,TreeSet> result = new Hashtable<String,TreeSet>();
                    //用于生成随即数
    Random r = new Random();

                    //求出1,2,3等奖的个数
    int no1_count = arrange/1000;
    int no2_count = arrange/100;
    int no3_count = arrange/5;

                    //使用TreeSet,避免产生重复的数
    TreeSet<Integer> no1 = new TreeSet<Integer>(); 
    while(no1.size()<no1_count){
    no1.add(r.nextInt(arrange));
    }

    TreeSet<Integer> no2 = new TreeSet<Integer>(); 
    while(no2.size()<no2_count){
    Integer temp = r.nextInt(arrange);
    if(!no1.contains(temp)){   //判断这个数是否已经被抽出做1等奖
    no2.add(temp);
    }
    }

    TreeSet<Integer> no3 = new TreeSet<Integer>(); 
    while(no3.size()<no3_count){
    Integer temp = r.nextInt(arrange);
    if((!no1.contains(temp))     //判断这个数是否已经被抽作1,2等奖
       && (!no2.contains(temp))){
    no3.add(temp);
    }
    }

    result.put("no1", no1);
    result.put("no2", no2);
    result.put("no3", no3);

    return result;
    }
    }