目录

  • 题目链接
  • 基本思路
    • 错排问题
    • 思路
  • 代码展示
    • 彩蛋

题目链接

  • 牛客链接:年会抽奖
  • 题目描述:

今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:

  1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
  2. 待所有字条加入完毕,每人从箱中取一个字条;
  3. 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
    现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?
  • 输入:

1
2
3

  • 输出

0 %
50 %
33.33%

基本思路

首先要正确理解题意,题目求解的是 求无人获奖的概率,也就是说,所有人都没有抽要自己的名字。

  • 只有一个人的时候,百分百中奖。

  • 两个人的时候,

  • 1 号可能拿了 2 号的纸条,那么 2 号 只能拿 1 号的纸条;

  • 1 号拿了自己的纸条,2 号也拿自己的纸条
    因此无人中奖的概率是 1 / 2 = 50 %

  • 三个人的时候

  • 1 号拿了 1 号的纸条,2 号拿了 2 号的纸条,3 号拿了 3 号的纸条;

  • 1 号拿了 1 号的纸条,2 号拿了 3 号的纸条,3 号拿了 2 号的纸条;

  • 1 号拿了 2 号的纸条,2 号拿了 1 号的纸条,3 号拿了 3 号的纸条;

  • 1 号拿了 2 号的纸条,2 号拿了 3 号的纸条,3 号拿了 1 号的纸条;

  • 1 号拿了 3 号的纸条,2 号拿了 1 号的纸条,3 号拿了 2 号的纸条;

  • 1 号拿了 3 号的纸条,2 号拿了 2 号的纸条,3 号拿了 3 号的纸条;

对应关系:

  • 1 == 1, 2 == 2, 3 == 3;
  • 1 == 1, 2 == 3, 3 == 2;
  • 1 == 2, 2 == 1, 3 == 3;
  • 1 == 2, 2 == 3, 3 == 1; 无人获奖
  • 1 == 3, 2 == 2, 3 == 1;
  • 1 == 3, 2 == 1, 3 == 2; 无人获奖
    至少有 2 / 6 = 33.33% 的概率无人获奖。

经过慢慢推测,这是一个 错排问题 (百度百科)

错排问题

  1. 开始有 n 张纸条,下标数字对应纸条上写的名字。

  1. 当 4 (代表某个人) 拿走了 k 号纸条,那么还有 n - 1 个人;

  2. 此时 k 有两种选择, 拿走 4 号纸条或者其他纸条(比如 3 号纸条);


我们假设 4号 没有拿到自己名字的纸条,
那么其他 n - 1 个人都有可能拿到 4 的纸条,
而剩下 n - 1 人中,k 可以拿 4 号的纸条,那么剩下 n - 2 人中又可以划分为 n - 2 个子问题;
或者拿其他纸条,那么 n - 1 人中又可以划分为 n - 1 个子问题。
因此得到 递推公式

F(n) = (n-1) * (F(n-1) + F(n-2))

思路

  1. 求出所有能抽中的结果,也就是 求阶乘
  2. 求出 错排的问题 的结果;
  3. 结果 = 错排结果 / 阶乘结果

代码展示

彩蛋

    public static void main1(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {int n = scanner.nextInt();if (n == 1)System.out.println("00.00%");else if (n == 2)System.out.println("50.00%");else if (n == 3)System.out.println("33.33%");else if (n == 4)System.out.println("37.50%");else if (n == 5)System.out.println("36.67%");else if (n == 6)System.out.println("36.81%");else if (n == 7)System.out.println("36.79%");else if (n == 8)System.out.println("36.79%");else if (n == 9)System.out.println("36.79%");else if (n == 10)System.out.println("36.79%");else if (n == 11)System.out.println("36.79%");else if (n == 12)System.out.println("36.79%");else if (n == 13)System.out.println("36.79%");else if (n == 14)System.out.println("36.79%");else if (n == 15)System.out.println("36.79%");else if (n == 16)System.out.println("36.79%");else if (n == 17)System.out.println("36.79%");else if (n == 18)System.out.println("36.79%");else if (n == 19)System.out.println("36.79%");else if (n == 20)System.out.println("36.79%");}}

搞错了搞错了,哈哈哈哈。再来!

    public static void main(String[] args) {Scanner scanner = new Scanner(System.in);while (scanner.hasNextInt()) {int n = scanner.nextInt();float none = method(n);float res = none/factorial(n)*100;System.out.println(String.format("%.2f",res) + "%");}}/*** 动态规划错排问题* @param n* @return*/public static float function(int n) {float[] dp = new float[n+1];dp[0] = 0;dp[1] = 0;dp[2] = 1;for (int i = 3; i <= n; i++) {dp[i] = (i-1) * (dp[i-1] + dp[i-2]);}return dp[n];}/*** 递归错排问题* @param n* @return*/public static float method(int n) {if (n == 1) {return 0;}else if (n == 2) {return 1;}return (n-1) * (method(n-1) + method(n-2));}/*** 递归求阶乘* @param n* @return*/public static float factorial(int n) {if (n == 1) return 1;return n * factorial(n-1);}/*** 非递归求阶乘* @param n* @return*/public static float factorialI(int n) {int res = 1;while (n > 1) {res *= n;n--;}return res;}

年会抽奖(Java 含彩蛋)相关推荐

  1. 魔数--咖啡宝宝(Java小彩蛋)

    最近在看一点JVM的东西,然后发现了一个有趣的东西.觉得有趣又简单,每个人都可以做,于是分享给大家. 不废话开始正文. 彩蛋实现步骤 1.编译一个java文件 随意编译一段java文件,然后得到jav ...

  2. 超全大厂Java面试彩蛋

    1.字符串的比较 Sting str =null; //str是null时会报错 system.out.println(str.equals.("test")); //优化1 sy ...

  3. java循环输入_【图文+视频新手也友好】Java一维数组详细讲解(内含练习题答案+详解彩蛋喔~)...

    [新手友好型视频+图文] 全面讲解Java一维数组(内含带答案和讲解的练习题彩蛋喔) 看完即上手!更有详解版练习题来帮你加深印象~~ 一.视频讲解 一维数组详解https://www.zhihu.co ...

  4. 【Java版oj】day35年会抽奖、抄送列表

    目录 一.年会抽奖 (1)原题再现 (2)问题分析 (3)完整代码 二.抄送列表 (1)原题再现 (2)问题分析 (3)完整代码 一.年会抽奖 (1)原题再现 年会抽奖__牛客网 今年公司年会的奖品特 ...

  5. java 自动下载自动搜索_360搜索彩蛋自动化开发实践

    奇技指南 我们常说的彩蛋,一般是指影视剧在剧情结束之后出现的影视片段,或者是游戏中制作者特意为玩 家留下的.隐藏在游戏中的一些有趣的内容. 对于搜索引擎来说,彩蛋是指搜索引擎在特定的检索 词下,刻意为 ...

  6. java过滤微信表情符号_微信隐藏彩蛋!表情加符号就能传递“神秘信息”

    微信翻译出彩蛋. 而有的语音信息在转文字后也会有表情翻译的信息出现,比如「太生气了」就能召唤出一个的表情. 类似的小彩蛋还有很多,你很难说这是产品经理的小趣味还是产品对词语识别的 bug. 最近,用户 ...

  7. 我发现微信、知乎、B站,居然都暗藏彩蛋!

    彩蛋,如今似乎成了许多影视作品的标配,当一部影视作品上映后,在知乎可以经常看到各类寻找彩蛋的问题. 除去影视作品,我们平常使用的一些互联网产品,比如微信.知乎等等,其实也隐藏了不少彩蛋. 今天,为大家 ...

  8. 再见了, VS Code!文末有彩蛋!

    点击上方"菜鸟学Python",选择"星标"公众号 重磅干货,第一时间送达 来源:github.blog/2020-05-06-new-from-satelli ...

  9. 震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下?

    荒腔走板 大家好,我是why. 时间过的真是快,一周又要结束了.那么,你比上周更博学了吗?先来一个简短的荒腔走板,给冰冷的技术文注入一丝色彩. 上面这张图是我之前在南五环,路过南苑机场的时候拍的. 这 ...

  10. 恩智浦AI视觉组之逐飞岁末彩蛋

      2020一年的工作已告一段落,昨天逐飞也已经发布了放假通知,虽然还有很多工作没做完,但春节改放假还是得放假,所以,先为2021年的工作放个彩蛋吧.   先回顾一下第十六届AI视觉组诞生,12月18 ...

最新文章

  1. 包含多个段的程序01 - 零基础入门学习汇编语言29
  2. 嵌入式C语言进行曲之要诀
  3. iOS开发UI篇—CALayer简介
  4. redis入门及java操作
  5. flutter怎么手动刷新_flutter局部刷新的实现示例
  6. Python 2.6.2的字节码指令集一览
  7. Angular2官网项目 (4)--路由
  8. zabbix监控pppoe线路_Zabbix 完整的监控流程
  9. 案例分享,从0到1了解一个完整项目
  10. 【PYTHON笔记】:文件打开和关闭
  11. 导入train_test_split时,ModuleNotFoundError: No module named 'sklearn.cross_validation'
  12. H3C路由器Hub-Spoke网络结构D×××配置案例(试读连载一二)
  13. ensp动态路由ospf配置
  14. 5.5mysql_MySQL5.5-MySQL5.5下载 v5.5.60.1官方版 64位/32位-第五资源
  15. 苹果手机计算机记录,苹果手机怎么查找以前的历史通话记录
  16. postman常用断言
  17. 一个超级实用的单片机调试技巧!DWT组件
  18. 扁平化ui设计界面的方式以及扁平化ui图标设计特点
  19. progisp下载时报错Chip Enable Program Error 后续解决
  20. Qt小项目之txt文本替换

热门文章

  1. STM32高速脉冲发波方案
  2. 1994年联想大调整,杨元庆上位,能赚钱的“书呆子”倪光南却走了
  3. 《从容一生》俞敏洪 书摘
  4. win10释放C盘空间(清理C盘)
  5. java 补丁_java SP3补丁说明
  6. 如何成为优秀的技术主管-管理篇
  7. 虚拟机安装过程中发生该错误:“客户机操作系统已禁用cup”问题解决方法【全】
  8. 板簧的弹性系数如何计算_滑板式钢板弹簧悬架变刚度计算方法的研究
  9. 大数据可视化实验六、七:大数据可视化工具—Processing(一)(二)
  10. html js3d魔方,40行JavaScript代码实现的3D旋转魔方动画效果