抢红包算法(公平版和手速版)

当我们在群里抢红包时真的是手速越快红包金额越大吗?
在这里插入图片描述
答案当然是并不是,都说了是拼手气,岂能是拼手速!
不过也可以有拼手速的方法
在这里插入图片描述

抢红包

  • 二倍均值法(公平版)
  • 线段切割法(手速版)

二倍均值法(公平版)

这是一种很合理很公平的抢红包算法了,绝对不会让你拼手速的,就别天真了。
在此我们假设
红包剩余金额为 M
红包剩余数量为 N
这种算法就是每次都在区间[0,M/N×2] 随机取一个数

假设100元红包发10个人,那么合理的做法应该是每个人领到10元的概率相同。
第一个人随机金额的范围为[0,100/10×2] ,也就是[0,20],这样平均可以领到10元,此时剩余金额为100-10=90。
第二个人随机金额的范围为[0,90/9×2] ,也就是[0,20],这样平均也可以领到10元,此时剩余金额为90-10=80。
第三个人随机金额的范围为[0,80/8×2] ,也就是[0,20],这样平均也可以领到10元。
这样推导下去,每个人领到相同金额的概率应该就是相同的了。

代码:

public static List<Double> doubleMeanMethod(double money,int number){List<Double> result = new ArrayList<Double>();if(money<0&&number<1)return null;double amount,sum=0;int remainingNumber=number;int i=1;while(remainingNumber>1){amount= nextDouble(0.01,2*(money/remainingNumber));sum+=amount;System.out.println("第"+i+"个人领取的红包金额为:"+format(amount));money -= amount;remainingNumber--;result.add(amount);i++;}result.add(money);System.out.println("第"+i+"个人领取的红包金额为:"+format(money));sum+=money;System.out.println("验证发出的红包总金额为:"+format(sum));return result;}

运行结果:
在这里插入图片描述
在这里插入图片描述

线段切割法(手速版)

这就是拼手速了,是时候展示手速了。
在这里插入图片描述

这个算法可以把总金额想象成一条线段,每个人都有机会切一刀,前面的人切剩下的后面的人再接着切,这样越是前面的人截取的长度(理解成领取到的红包金额)越大的概率就越大。

代码:

public static void lineSegmentCutting(double money,int number){if(money<0&&number<1)System.out.println("输入错误!");double begin=0,end=money;double y=0;for(int i=0;i<number-1;i++){double nn=0;double amount=nextDouble(begin,end);nn=amount-begin;System.out.println("第"+(i+1)+"个人领取的红包金额为:"+format(nn));y+=nn;begin=amount;}System.out.println("第"+number+"个人领取的红包金额为:"+format(end-begin));y+=(end-begin);System.out.println("验证发出的红包总金额为:"+format(y));}

运行结果:
在这里插入图片描述
在这里插入图片描述

完整代码:

package com.zhl.blogTest;import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Scanner;public class redEnvelope {/*Random 随机生成一个区间在[min , max]的数值randNumber 将被赋值为一个 MIN 和 MAX 范围内的随机数int randNumber =rand.nextInt(MAX - MIN + 1) + MIN; *//*** 生成min到max范围的浮点数**/public static double nextDouble(final double min, final double max) {return min + ((max - min) * new Random().nextDouble());}public static String format(double value) {return new java.text.DecimalFormat("0.00").format(value); // 保留两位小数}//二倍均值法public static List<Double> doubleMeanMethod(double money,int number){List<Double> result = new ArrayList<Double>();if(money<0&&number<1)return null;double amount,sum=0;int remainingNumber=number;int i=1;while(remainingNumber>1){amount= nextDouble(0.01,2*(money/remainingNumber));sum+=amount;System.out.println("第"+i+"个人领取的红包金额为:"+format(amount));money -= amount;remainingNumber--;result.add(amount);i++;}result.add(money);System.out.println("第"+i+"个人领取的红包金额为:"+format(money));sum+=money;System.out.println("验证发出的红包总金额为:"+format(sum));return result;}//线段切割法public static void lineSegmentCutting(double money,int number){if(money<0&&number<1)System.out.println("输入错误!");double begin=0,end=money;double y=0;for(int i=0;i<number-1;i++){double nn=0;double amount=nextDouble(begin,end);nn=amount-begin;System.out.println("第"+(i+1)+"个人领取的红包金额为:"+format(nn));y+=nn;begin=amount;}System.out.println("第"+number+"个人领取的红包金额为:"+format(end-begin));y+=(end-begin);System.out.println("验证发出的红包总金额为:"+format(y));}public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("这是一段模拟抢红包的代码。");int number;double money;System.out.print("请输入红包总金额:");money = sc.nextDouble();System.out.print("请输入红包数量:");number = sc.nextInt();//System.out.println(money + " " + number);//二倍均值法doubleMeanMethod(money,number);//System.out.println(doubleMeanMethod(money,number).toString());//也是可以直接输出list的,为了观察方便,我就在循环中输出了,存在list里主要是为了后续方便数据的使用System.out.println();//线段切割法lineSegmentCutting(money,number);}}

读到这里了,你真是个小可爱。不妨点个赞再走吧。
在这里插入图片描述
加油!

共同努力!

Keafmd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/54903.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

除了智能音箱,AI语音还可以用在哪里?

作者&#xff1a;Echo 来源&#xff1a;科技树&#xff08;ID&#xff1a;techtreex&#xff09; 说起来可笑&#xff0c;每次我找不到眼镜的时候&#xff0c;我都想拿出手机&#xff0c;给我的眼镜“打个电话”&#xff0c;好听声辨位。 不知道有没有人&#xff0c;开发这种功…

会唱歌、会弹琴,清华大学 AI 学生华智冰火了

整理 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 清华大学计算机系知识工程实验室&#xff0c;开发的中国首个原创虚拟学生——华智冰&#xff0c;与近日亮相。她的声音、肢体动作全部由人工智能完成。 今年6月&#xff0c;清华大学计算机系录取了一位…

清华大学数学与计算机学院院长,清华“冰冰”,今日亮相!

6月15日&#xff0c;清华大学计算机系举行“华智冰”成果发布会。作为我国首个原创虚拟学生&#xff0c;华智冰将入学清华大学计算机系&#xff0c;师从清华大学唐杰教授&#xff0c;即日起开启在清华大学的学习和研究生涯。 与一般的虚拟数字人不同&#xff0c;华智冰拥有持续…

AI语音技术的应用与发展前景

随着科技进步和产业变革的加速演进&#xff0c;人工智能&#xff08;AI&#xff09;已经成为兵家必争之地。甚至放眼全球&#xff0c;在政府、学术机构、企业等各个层面&#xff0c;AI都受到高度重视&#xff0c;其在学术研究、技术创新、人才教育等方面的发展都呈现全新态势。…

重磅!清华大学首个原创虚拟美女学生,“华智冰”唱歌好听到爆

点击“开发者技术前线”&#xff0c;选择“星标” 让一部分开发者看到未来 来自&#xff1a;清华大学 9月28日&#xff0c;清华大学首位AI虚拟学生“华智冰”正面出镜唱歌&#xff0c;其歌声、人类特征均由人工智能技术完成。 2021年 6月15日清华大学举行 计算机系“华智冰”成…

清华大学美女学霸“华智冰”是假的?--人工智能(AI)的前世今生

近期清华大学首个人工智能学生华智冰火爆全网的&#xff0c;虽然“她”技能爆表&#xff0c;但也只是“假的”。她是由北京智源人工智能研究院、智谱AI团队、小冰公司联合研发。那么我们就来看看什么是人工智能&#xff0c;以及人工智能的前世今生。 目录 第一章 超级学霸-华智…

EasyCVR通过GB28181级联到紫光华智综合安防应用平台无法注册成功问题排查

紫光华智云平台是以“视频AI”产品的研发、制造、销售和服务的企业&#xff0c;华智平台可以支持国标平台&#xff0c;因此也能通过级联的方式接入EasyGBS及EasyCVR平台。紫光华智云平台接入EasyGBS的注意事项我们之前为大家介绍过&#xff0c;大家可以翻阅或者搜索我们以前的博…

清华大学迎来中国首个原创虚拟学生华智冰:智商、情商双高,颜值出众

2021 年 6 月 1 日&#xff0c;清华大学计算机系知识工程实验室迎来了中国首个原创虚拟学生 — 华智冰&#xff0c;清华大学为她办理了学生证和邮箱。 报道称&#xff0c;华智冰智商和情商双高&#xff0c;可以作诗、作画、创作剧本杀&#xff0c;还具有一定的推理和情感交互的…

清华大学首个原创虚拟学生!“华智冰”入学清华!

击“凹凸域”&#xff0c;马上关注 更多内容、请置顶或星标 来自&#xff1a;清华大学 6月15日 清华大学举行 计算机系“华智冰”成果发布会 作为我国首个原创虚拟学生 华智冰将入学清华大学计算机系 师从清华大学唐杰教授 即日起开启在清华大学的 学习和研究生涯 华智冰的“诞…

人工智能|清华大学虚拟学生「华智冰」亮相能作诗绘画懂音乐

清华大学中国首个原创虚拟学生「华智冰」近日亮相&#xff0c;就读于计算机系知识工程实验室。 据介绍&#xff0c;华智冰不仅形象亲切、言语自然&#xff0c;更会作诗、绘画&#xff0c;以及有一定的音乐才艺。负责人之一清华大学教授唐杰表示&#xff0c;华智冰之所以聪慧动人…

中国AIGC创投现状:稀缺项目分分钟独角兽,能做大模型500万年薪,还有创业公司成了OpenAI炮灰...

衡宇 发自 凹非寺量子位 | 公众号 QbitAI GPT狂飙&#xff0c;AI投资突进&#xff0c;整个创投市场都热得发烫。 稀缺的公司分分钟独角兽&#xff0c;做大模型的人才出500万年薪也难招&#xff0c;但与此同时&#xff0c;有的创业公司还没来得及在市场上露出锋芒&#xff0c;就…

我为什么放弃了 LangChain?ChatGPT宣布将在下周推出安卓版本

&#x1f989; AI新闻 &#x1f680; ChatGPT宣布将在下周推出安卓版本 摘要&#xff1a;ChatGPT官方宣布将在下周推出安卓版本&#xff0c;并已在Google Play商店开放预注册。安卓版与iOS版在功能上大致相同&#xff0c;可能拥有现版本大部分功能&#xff0c;还可以跨设备同…

google运行速度最近突然变慢了!!怎么回事!!!完美解决!!

有没有发现最近google&#xff08;谷歌Chrome&#xff09;浏览器突然变得很卡很慢&#xff0c;以前秒开的日子仿佛不复存来了&#xff01;&#xff01; ladies and gentleman &#xff0c;Here comes the perfect solution&#xff01;&#xff01;&#xff01;&#xff01; …

全网超详细的如何Ping特定的端口号,比如telnet Ping,nc Ping,nmap Ping等

文章目录 1. 文章引言2. ping特定端口2.1 使用telnet ping特定端口2.2 使用nc ping特定端口2.3 使用nmap ping端口2.4 使用Powershell Ping特定端口 3. 补充说明3.1 apt-get还是yum的区别3.2 解决sudo: apt-get: command not found的错误3.3 解决-bash: xxx: command not found…

GPT-4耗尽全宇宙数据!OpenAI接连吃官司,竟因数据太缺了,UC伯克利教授发出警告

【导读】深陷数据风波的OpenAI&#xff0c;背后真正原因竟是优秀的数据太少了。 穷尽「全网」&#xff0c;生成式AI很快无数据可用。 近日&#xff0c;著名UC伯克利计算机科学家Stuart Russell称&#xff0c;ChatGPT和其他AI工具的训练可能很快耗尽「全宇宙的文本」。 换句话…

python简单小游戏代码教程,python小游戏程序源代码

球球各位大神怎么用python写一个猜词小游戏的代码&#xff1f; key input(请输入一个单词&#xff1a;)description input(输入单词描述&#xff1a;)chance 5mark 5print(现在开始游戏)print(description \t 这是单词的描述,请你输入这个单词&#xff1a; )for i in ra…

python简单小游戏代码

前言 大家小时候都玩过贪吃蛇吧&#xff1f;小编小时候可喜欢拿爸妈的手机玩了&#xff0c;厉害着呢&#xff01;今天&#xff0c;小编就来用100行代码实现一个简易版的贪吃蛇。 在网上&#xff0c;贪吃蛇教程蛮多的&#xff0c;但要安装蛮多库的&#xff0c;而且也不够清晰&…

ChatGPT最擅长完成哪些工作,学会了这些你的工作效率提高100倍

自然语言处理技术正在迅速发展&#xff0c;随之而来的是对于 ChatGPT 的需求也在不断增加。ChatGPT 作为一种强大的自然语言处理工具&#xff0c;已经被广泛应用于多个领域。在本文中&#xff0c;我们将会介绍一些可以借助 ChatGPT 帮忙完成的工作&#xff0c;让大家更好地了解…

Redis之父:找个靠谱的 C 程序员太难了!

作者 | yukang 出品 | 程序员的喵 &#xff08;ID: coderscat &#xff09; 西西里岛&#xff0c;是位于意大利南部阳光而宁静的岛屿&#xff0c;正如电影《西西里岛的美丽传说》中演绎的那样&#xff0c;这里有着古老的历史和建筑&#xff0c;看起来和 IT 不沾边&#xff0…

.Net 问世 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 2 月 13 日&#xff0c;在 2001 年的今天&#xff0c;跨国科技公司谷歌&#xff08;Google&#xff09;进行了其历史上的第一次收购&#xff0c;收购对象是 Dej…