Java编程题:年会抽奖(错排问题)
年会抽奖
今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:
- 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;
- 待所有字条加入完毕,每人从箱中取一个字条;
- 如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”
现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?
输入描述:
输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。
输出描述:
对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。
示例1
输入
2
输出
50.00%
解析:
本题求解需要求出所有可能的抽奖情况,及所有人都不中奖时的情况,两者相除即为所得。这里主要牵扯到了一个错排问题。
错排问题: n个有序的元素应有n!个不同的排列,如若一个排列使得所有的元素不在原来的位置上,则称这个排列为错排;有的叫重排。
求错排问题的递推关系,分两步走:
第一步,考虑第n个元素,把它放在某一个位置,比如位置k,一共有n-1种放法;
第二步,考虑第k个元素,这时有两种情况:
(1)把它放到位置n,那么对于除n以外的n-1个元素,由于第k个元素放到了位置n,所以剩下n-2个元素的错排即可,有Dn-2种放法;
(2)第k个元素不放到位置n,这时剩下的这n-1个元素错排就好了,有Dn-1种放法。(如果位置n不放第k个元素,那么我们就可以把第k个元素当作是原来的第n个元素,相当于n-1个元素错排)
综上得到:
import java.util.*;
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);while(scan.hasNext()){int n = scan.nextInt(); //数据的个数float sum1 = factorial(n);float sum2 = count(n);
//将得到的分子分母进行相除,就可以得到概率了。float result1 = (sum2/sum1)*100;System.out.println(String.format("%.2f%%", result1) );}}
/*** 错排算法*/
public static float count(int n) {if(n==1){return 0;}else if(n==2){return 1;}else{return (n-1)*(count(n-1)+count(n-2));}
}/*** n的阶乘*/public static float factorial(int num) {float result = 1;if(num==0){return 1;}else if (num > 0) {result = num * factorial(num - 1);}return result;}
}
来源:牛客网
Java编程题:年会抽奖(错排问题)相关推荐
- java 编程题_最新JAVA编程题全集(50题及答案)92862
<最新JAVA编程题全集(50题及答案)92862>由会员分享,可在线阅读,更多相关<最新JAVA编程题全集(50题及答案)92862(32页珍藏版)>请在人人文库网上搜索. ...
- JAVA编程题全集(50题及答案) 之 21-50题
JAVA编程题全集(50题及答案) 之 java编程题1~20题 [程序21] 题目:求1+2!+3!+-+20!的和 public class lianxi21 {public static voi ...
- java经典50道_50道经典的JAVA编程题(41-45)
50道经典的JAVA编程题(41-45),苦逼的程序猿,晚上睡不着了编程吧~今天坚持做10道题!发现编程能是我快乐...O(∩_∩)O哈哈~能平静我烦乱的心,剩下5道题留到考试完了再做吧!该睡觉了.. ...
- 质量不同的球java编程_荐非常经典的java编程题全集-共50题(1-10)...
非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...
- java语言编程三角形图形_编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用......
导航:网站首页 > 编程题:编写程序输入三角形的3条边长,计算并输出... 求助一道JAVA编程题:编写一个类似记事本的图形用... 编程题:编写程序输入三角形的3条边长,计算并输出... 求助 ...
- java类求圆的面积周长_java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题。编写一个应用程序计算圆的周长和面积,设圆的半...
问题标题 java编程 1. 设计一个求圆的面积和周长的类,要求:1计算当半径r,JAVA编程题.编写一个应用程序计算圆的周长和面积,设圆的半 2019-5-23来自ip:15.196.194.53的 ...
- java设计一个形状shape_编程定义一个图形接口 Shape, 内含2个抽象方法 get... JAVA编程题:编一个程序包含一个接口 shape(该接......
导航:网站首页 > 编程定义一个图形接口 Shape, 内含2个抽象方法 get... JAVA编程题:编一个程序包含一个接口 shape(该接... 编程定义一个图形接口 Shape, 内含2 ...
- java编程50_荐非常经典的java编程题全集-共50题(1-10)...
非常经典的java编程题 程序1:斐波那契数列问题 题目概述: 古典问题: 有一对兔子,从出生第三个月起每月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多 ...
- 一些简单的java编程题(2) ————古典问题(兔子问题)
版权声明: 本文为博主原创文章,未经博主允许不得转载. /* (程序头部注释开始) 版权声明:保留个人权利. 如程序有不当之处,敬请指正.* 文件名称: <一些简单的java编程题(2) --- ...
- Java编程题小练习(初级):输入10个整数并进行排序输出。
程序代码: package com.xingzhao.Test; /** 题目描述:输入10个整数,排序后输出.* * 分析:* 1.输入10个整数,存储为数组* 2.使用冒泡排序法将数组排序* 3. ...
最新文章
- 手机qpython下载_QPython
- 图像化转向名词解释_遥感——数字图像处理名词解释及简单整理
- HDFS读写文件实例与解析
- Oracle常用知识总结
- DT时代下 数据库灾备的探索与实践
- 数据科学入门与实战:玩转pandas之六时间序列
- JavaScript中的高级特性及特别对象、属性和方法
- python 服务端判断客户端异常断开
- linux操作实例,linux下的一些文档操作实例 | Soo Smart!
- 漫谈Java IO之 NIO那些事儿
- spring扩展点一:BeanDefinitionRegistryPostProcessor
- 神经网络是不是分类算法,人工神经网络分类算法
- GET 和POST的用法
- 怎样才能叫高级程序员?
- 最全的Gateway统一网关快速入门
- 企业经营核心要素框架
- Java基础第一讲:Java的故事和Java编程环境搭建
- MySQL隔离级别的底层理解(MVCC+锁)
- 第七周求圆柱体表面积
- Android Audio - 支持多个CODEC同时录音
热门文章
- 七天学完Vue之第二天学习笔记(自定指令,过滤器,生命周期函数,动画效果)
- ChinaITLab Linux实战工程师网校课程-8CD
- 医疗信息管理系统(HIS)——>业务介绍
- 服务器网卡驱动装好后本地连接显示,系统装好后网卡驱动也装好了,可是没有本地连接,怎么弄...
- 牛顿迭代法的图像推导思路以及代码
- 东芝2303am维护清零_东芝打印机2303A怎样清零
- QQ的clientkey与淘宝旺旺Token 不同平台环境下的登录认证
- html yy直播,网页YY直播间进入方法 网页YY迷你版怎么用
- Apache HttpClient4使用教程
- 计算机无法启动打印服务,Win7无法启动print spooler服务报错1068怎么办?