抽奖问题,让积分越多的用户抽取的概率越高

编程入门 行业动态 更新时间:2024-10-08 05:28:46

抽奖问题,让积分<a href=https://www.elefans.com/category/jswz/34/1754559.html style=越多的用户抽取的概率越高"/>

抽奖问题,让积分越多的用户抽取的概率越高

首先,根据需求,我所设计的方案是要求:积分高的用户获得奖品的概率高,但是不能让一些积分少的用户没有概率获得奖品,我的设计思路如下:

首先,积分排名位于0-30000的用户总体获得奖品的概率是25%,30001-40000的用户获得概率是25%,40001-45000的用户获得概率是25%,45000-50000的用户的获得概率是25%。

第一步,创建一个用户类,里面包含用户的索引和积分值,这样创建的目的是,在对按照积分进行排序时,仍然可以知道用户本来的索引值。

第二步,通过一个用户数组来存放用户的信息,然后通过随机函数的方式进行初始化。

第三步,创建一个方法用于对对象数组按照积分进行排序,继承了Comparator。然后调用此方法对用户数组进行排序。

第四步,创建一个方法,用于抽奖,首先,随机生成0~3四个数,用来表示抽到每个区域的概率,0对应积分排名在0~30000的用户,以此类推。然后返回用户的排名。

第五步,主方法里调用此方法,获得抽奖的排名,然后输出获奖用户的基本信息,并且返回排名。

本实验的中使用了一个for循环用于初始化数组,然后调用了Java底层的排序算法,剩下的都是常数级别的时间复杂度。所以综合计算,该算法的时间复杂度为O(nlogn)

package example;import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;public class SweepStake {public static void main(String[] args) {SweepStake sweepStake=new SweepStake();/*** 通过随机函数创建用户的积分信息,50000个用户,同时积分的上限是50000,* 然后对用户表通过积分进行排序,方便后面进行抽取获奖的概率设置*/User[] user= new User[50000];Random random = new Random();for (int i = 0; i < 50000; i++) {User user1=new User(i, random.nextInt(50000));user[i]=user1;//System.out.println(user[i]);}//对数组进行排序Arrays.sort(user,new UserComparator());int prize = sweepStake.prize();System.out.println("获奖玩家信息"+user[prize]+"抽中的排名"+prize);}/*** 对对象中的数据按照积分进行排序。*/public static class UserComparator implements Comparator<User>{@Overridepublic int compare(User user1, User user2) {return user1.getScore()-user2.getScore();}}/*** 设置概率问题:* 排名在0-30000的概率为1/4,30001-40000的概率为1/4,40001-45000的概率为1/4,45001-50000的概率为1/4*/public int prize(){//设置第一轮随机会出现0,1,2,3四个数,然后选择对应区域的范围再次进行随机Random random=new Random();int index=0;//中奖的下标int area=random.nextInt(4);//根据出现的区域,进行随机抽取样本值switch (area){case 0:index=random.nextInt(30000);//break;case 1:index=random.nextInt(10000)+30000;break;case 2:index=random.nextInt(5000)+40000;break;case 3:index=random.nextInt(5000)+45000;break;default:break;}return index;}
}
class User{private int index;private int score;public User(int index, int score) {this.index = index;this.score = score;}@Overridepublic String toString() {return "User{" +"index=" + index +", score=" + score +'}';}public int getIndex() {return index;}public void setIndex(int index) {this.index = index;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}
}

更多推荐

抽奖问题,让积分越多的用户抽取的概率越高

本文发布于:2024-03-23 16:03:32,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1740100.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:越多   越高   概率   积分   用户

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!