1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%假设这是张表或是一个集合,数字代表序号,A代表ID 百分数代表每一行记录出现在页面例表第一位的机率(总合为100%)现在要求把些记录查寻出来显示在页上,按所给的百分比把相应记录显示在第一位。(50%代表有50%的机会出现在第一的位置)求一算法,能用JAVA实现最好
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%假设这是张表或是一个集合,数字代表序号,A代表ID 百分数代表每一行记录出现在页面例表第一位的机率(总合为100%)现在要求把些记录查寻出来显示在页上,按所给的百分比把相应记录显示在第一位。(50%代表有50%的机会出现在第一的位置)求一算法,能用JAVA实现最好
随机出一个0~99的整数,由百分比确定一个区间(百分比越大占有的区间越大,如下所示),整数出现在哪个区间就把这一行作为第一行,例如随机数为55时把A3放到第一行。
1 A1 10% [0-10)
2 A2 15% [10-25)
3 A3 35% [25-60)
4 A4 6% [60-66)
5 A5 30% [66-96)
6 A6 4% [96-100) 执行1万次的一个结果:
(指定的概率/设为第一行的次数)
10 1008
15 1567
35 3483
6 613
30 2935
4 394测试代码:import java.util.Random;public class RandomTest { private static Random RANDOM = new Random(); public static void main(String[] args) {
int[][] array = new int[][] { { 10, 0 }, { 15, 0 }, { 35, 0 }, { 6, 0 },
{ 30, 0 }, { 4, 0 } };
for (int i = 0; i < 10000; i++) {// 测试10000次
setFirst(array);
}
for (int i = 0; i < array.length; i++) {//指定的概率-实际次数
System.out.println(array[i][0] + " " + array[i][1]);
}
} private static void setFirst(int[][] array) {
int begin = 0;
int r = RANDOM.nextInt(100);
for (int i = 0; i < array.length; i++) {
if (r >= begin && r < begin + array[i][0]) {//判断区间
array[i][1] = array[i][1] + 1;//设为第一行,次数加1
break;
} else {
begin += array[i][0];
}
}
}}
1 A1 10%
2 A2 15%
3 A3 35%
4 A4 6%
5 A5 30%
6 A6 4%
楼主取出的百分比在表里应该是一个字段吧?如果是的话 取出值后用字符串截取 从第一位取到百分号的位置。然后提取出来 转换成整型然后 比较 排序 不知道可以不 嘿嘿~
拆分字符串示例 :
String str="35%";
String[] test=str.split("%");
int i=Integer.parseInt(test[0]);
out.println(i);