最少代码写出数组概率方法。
数组每位表示该位的概率。
int[] prob = {20,30,20,8,2,5,3,1,1,10};

解决方案 »

  1.   

    既然楼主说的不是很清楚,那我就先yy一下吧!
    数组概率就是说,prob有10个元素,分别对应0到9的每一位;
    而prob的元素和为100,证明是同一个事件,就是说随机抽出一位,0到9的概率分别如prob所列。------------------------------------------思路:
    prob的元素映射成0到99的区间有以下关系:
    [20, 30, 20, 8, 2, 5, 3, 1, 1, 10]  -->  [20, 50, 70, 78, 80, 85, 88, 89, 90, 100]
    由于0到99的随机数是均匀分布的,所以每个元素占的长度,就是相当于被选中的概率。
    所以,只要看0到99的随机数random,在哪一个区间,就知道是哪个数字被选中了。下面代码主要就是【sum += prob[i]】和【if (random <= sum)】,其他都是假设条件。
    这里先假设prob的元素全部为10,这样输出结果更容易看出来他们之间的关系。楼主换成原来的prob就行。
    int[] prob = {10, 10, 10, 10, 10, 10, 10, 10, 10, 10};
    int[] num = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    int sum = 0;
    int random = (int) (Math.random() * 100);
    for (int i = 0; i < prob.length; i++) {
        sum += prob[i];   // 概率段
        if (random <= sum) {   // 一大于,就是踏入了该概率段
            System.out.println("random: " + random + " - " + num[i]);
            break;
        }
    }