年会抽奖【编程题】

                                                                                             

                                   📑打牌 : da pai ge的个人主页
                                   🌤️个人专栏 : da pai ge的博客专栏
                                   ☁️宝剑锋从磨砺出,梅花香自苦寒来

目录

☁️题目解析

☁️解题思路

☁️示例代码


☁️题目解析

错排问题举例:
A B C…… 表示写着n位友人名字的信封, a b c…… 表示n份相应的写好的信纸。把错装的总数为记作
D(n) 。假设把 a错装进B里了 ,包含着这个错误的一切错装法分两类:
b 装入A里,这时每种错装的其余部分都与 A B a b 无关,应有 D(n 2) 种错装法。
b装入 A B 之外的一个信封,这时的装信工作实际是把(除 a 之外的) n 1 份信纸b、c …… 装入(除 B 以外
的) n 1 个信封 A C…… ,显然这时装错的方法有 D(n 1) 种。
总之在a装入 B 的错误之下,共有错装法 D(n 2) D(n 1) 种。
a 装入 C ,装入 D…… n 2 种错误之下,同样都有 D(n 1) D(n 2) 种错装法,因此 D(n) (n 1)[D(n 1) D(n
2)]
D(n) = (n-1) [D(n-2) + D(n-1)]
特殊地, D(1) = 0, D(2) = 1.

☁️解题思路

错排的递推公式是: D(n) = (n - 1) [D(n - 2) + D(n - 1)] ,也就是第 n 项为 n - 1 倍的前两项和。通过这个递推公式可以
得到在总数为 n 的时候,错排的可能性一共有多少种。那么要求错排的概率,我们还需要另一个数值,就是当总数
n 的时候,所有的排列组合一共有多少种,那么根据排列组合,肯定是使用
的公式来求,也就是 n 的阶乘。所以结果很简单,就是用公式求出第 n 项的错排种类,和 n 的阶乘,然后两者一除,
就是概率了。

☁️示例代码

import java.util.*;
public class Main{
public static void main(String[] args){
long d[] = new long[21]; // 错排数据
d[0] = d[1] = 0;
d[2] = 1;
long f[] = new long[21]; // 阶乘
f[0] = f[1] = 1;
f[2] = 2;
// 算N错排数据和阶乘
for(int i = 3; i <= 20; ++i){
d[i] = (i-1) * (d[i-1] + d[i-2]);
f[i] = i * f[i-1];
}
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
System.out.printf("%.2f%%\n", 100.0*d[n]/f[n]);
}

  • 23
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
年会抽奖是一项令人期待的活动,而Github作为一个优秀的软件开发平台,可以为年会抽奖增添更多的乐趣和创意。 首先,在Github上创建一个专门用于年会抽奖的仓库。在仓库的README文件中,列出所有参与抽奖的员工名单,并使用Markdown语法进行格式化,使其更加美观易读。 其次,利用Github的Issue功能来进行抽奖活动。通过创建一个Issue,将其作为抽奖的主题,并在内容中规定抽奖的规则和奖品,例如:抽取三等奖的员工将获得小礼品,二等奖将获得护脖枕等,让大家可以提前了解具体的抽奖细则。 然后,利用Github的评论功能来进行参与抽奖的报名。员工可以在对应的Issue中留下自己的评论或者回复,表示自己的参与意愿。这样,大家可以方便地参与抽奖,也方便组织者进行统计。 最后,使用Github的随机数生成器功能来进行实际的抽奖。可以通过编写一段简单的代码,在仓库中创建一个新的分支,将所有参与抽奖的员工名字放入一个数组中,并使用随机数生成器从中抽取获奖名单。在抽奖结果出炉后,将结果公布在仓库的评论区中,让大家可以实时了解获奖情况。 通过利用Github进行年会抽奖,不仅可以提高工作效率,还兼具互动性与趣味性。同时,通过版本控制和可追溯性,抽奖结果的公正性也能得到保证。这样的抽奖方式将以数字化的形式落地,为年会增添一份新鲜感和创新力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值