题目
一、大概思路
一开始准备直接把所有数加在一起sum,当随机数>sum的时候当前用户的ID就是中奖用户,但是因为中间需要排序,并且需要摸清原来的用户ID和排序之后用户ID的对应关系,试了一下特别麻烦。
就想到用hashmap来做,比如说第一个用户的积分是20,那么就会存20个键值对,key是自然增长的数,然后value是用户的id。通过random取到某个随机数之后,只要通过hashmap.get()取得随机数对应的ID就可以知道中奖的用户是哪一位了。
二、代码实现
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class Random_ID {
public static void main(String[] args) {
int arr[] = {20,34,160,212,512,333,152,20};
int sum[] = {0,0,0,0,0,0,0,0};
int total = 0;
for(int i = 0 ; i < 100000; i++){
int flag = getID(arr);
sum[flag] = sum[flag] + 1;
}
for(int i = 0 ; i < sum.length; i ++){
total = total + sum[i];
}
for(int i = 0 ; i < sum.length; i ++){
float pet= (float)sum[i]/(float)total * 100;
System.out.println("ID为" + i +"的顾客的中奖概率为" + pet + "%" );
}
}
private static int getID(int[] arr){
int sum = 0;
HashMap<Integer,Integer> hashmap = new HashMap<Integer,Integer>();
for(int i = 0; i < arr.length; i ++){
hashmap.put(i, arr[i]);
sum = sum + arr[i];
}
int flag = 0;
for(int i = 0 ;i< arr.length; i ++){
for(int j = 0 ; j < arr[i]; j ++){
hashmap.put(flag,i);
flag++;
}
}
Random random = new Random();
Integer s = random.nextInt(sum);
return hashmap.get(s);
}
}
测试写的比较随意不要在意😂
总结
不知道还有其他啥简单的方法不。
纯写出来玩的,别当真,用户量和积分最大数据量是25亿,随随便便就跑炸了。
本文含有隐藏内容,请 开通VIP 后查看