第28题手写抽奖算法
Posted 小虚竹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第28题手写抽奖算法相关的知识,希望对你有一定的参考价值。
文章目录
零、前言
今天是学习 JAVA语言 打卡的第28天,每天我会提供一篇文章供群成员阅读( 不需要订阅付钱 ),读完文章之后,按解题思路,自己再实现一遍。在小虚竹JAVA社区 中对应的 【打卡贴】打卡,今天的任务就算完成了。
因为大家都在一起学习同一篇文章,所以有什么问题都可以在群里问,群里的小伙伴可以迅速地帮到你,一个人可以走得很快,一群人可以走得很远,有一起学习交流的战友,是多么幸运的事情。
学完后,自己写篇学习报告的博客,可以发布到小虚竹JAVA社区 ,供学弟学妹们参考。
我的学习策略很简单,题海策略+ 费曼学习法。如果能把这100题都认认真真自己实现一遍,那意味着 JAVA语言 已经筑基成功了。后面的进阶学习,可以继续跟着我,一起走向架构师之路。
一、题目描述
题目: 小虚竹为了给粉丝送福利,决定在参与学习打卡活动的粉丝中抽一位幸运粉丝,送份小礼物。为了公平,要保证抽奖过程是随机的。
二、解题思路
1、把参与的人员加到集合中
2、使用Random对象获取随机数
3、把随机数当下标,获取集合中的幸运用户
三、代码详解
public class Basics28
public static void main(String[] args)
List<String> luckUserNames = getLuckUserNames();
Random random = new Random();
int luckNum = random.nextInt(6);
System.out.println("幸运的未来大佬是:"+luckUserNames.get(luckNum));
private static List<String> getLuckUserNames()
List<String> luckUserNames = new ArrayList<String>();
luckUserNames.add("李慢慢_");
luckUserNames.add("TryAgain-");
luckUserNames.add("team_dog");
luckUserNames.add("Jasonakeke");
luckUserNames.add("学好c语言的小王同学");
luckUserNames.add("Ara~追着风跑");
return luckUserNames;
解法二:优化抽奖算法
解题思路
随机次数太少,需要优化
需要列出所有人随机命中的次数,显示出来,比较公开公平
代码详解
public class LuckDraw
public static void main(String[] args)
List<String> luckUserNames = getLuckUserNames();
Random random = new Random();
//key:luckNum ,value:count
Map<Integer,Integer> luckNumMap = new HashMap<Integer, Integer>();
for (int i = 0; i < 100; i++)
int luckNum = random.nextInt(4);
Integer count = luckNumMap.get(luckNum);
if(count==null)
count = 0;
++count;
luckNumMap.put(luckNum,count);
Integer maxLuckNum = 0;
Integer maxCount =0;
for(Integer luckNum:luckNumMap.keySet())
if(maxCount<luckNumMap.get(luckNum))
maxCount = luckNumMap.get(luckNum);
maxLuckNum = luckNum;
System.out.println(luckUserNames.get(luckNum)+"同学的幸运值:"+luckNumMap.get(luckNum));
System.out.println("本周学习打卡积分第一且是幸运的未来大佬是:"+luckUserNames.get(maxLuckNum));
private static List<String> getLuckUserNames()
List<String> luckUserNames = new ArrayList<String>();
luckUserNames.add("学好c语言的小王同学");
luckUserNames.add("Ara~追着风跑");
luckUserNames.add("李慢慢_");
luckUserNames.add("Jasonakeke");
return luckUserNames;
四、推荐专栏
五、示例源码下载
关注下面的公众号,回复筑基+题目号
筑基28
以上是关于第28题手写抽奖算法的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode算法题-First Bad Version(Java实现-三种解法)
LeetCode算法题-Move Zeroes(Java实现-三种解法)
LeetCode算法题-Valid Perfect Square(Java实现-四种解法)