目录

一、年会抽奖

(1)原题再现

(2)问题分析

(3)完整代码

二、抄送列表

(1)原题再现

(2)问题分析

(3)完整代码


一、年会抽奖

(1)原题再现

年会抽奖__牛客网

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

输入描述:

输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。

输出描述对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。

示例1

输入

2

输出

50.00%

(2)问题分析

这个题目没有想象的简单,n个人取到的都不是自己名字的概率=n个人取到的不是自己名字的序列个数 / n个人可能抽取的所有可能性。

首先:.n个人可能抽取的所有结果是n的阶乘(比如三个人,甲先从3张中抽,乙再从2张中抽,丙最后从1张里抽,所有可能的结果为3*2*1=6)

其次:n个人抽到不是自己的序列个数。假设第一个人抽到的不是自己的个数;假设第二个人这个时候拿到了第一个人的名字,那么对于第二个人的名字有两种情况:第一种:第二个人的名字是被第一个人拿到了,也就是甲和乙互相拿了对方的名字,那么对于其他的n-1个人来说互相拿错是一个规模n-2的子问题 ;第二种:第二个人的名字没有被第一个人拿到,则剩下的问题是规模n-1的子问题。

(3)完整代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);while (sc.hasNextInt()) {double num = sc.nextInt();double ans = error(num) / all(num);System.out.format("%.2f", ans * 100);System.out.println("%");}}//所有可能的情况public static double all(double num) {double ans = 1;for (int i = 1; i <= num; i++) {ans *= i;}return ans;}//拿错的情况public static double error(double num) {if (num == 1) {return 0;}if (num == 2) {return 1;}return (num-1)*(error(num - 2) + error(num - 1));}
}

二、抄送列表

(1)原题再现

抄送列表__牛客网

NowCoder每天要处理许多邮件,但他并不是在收件人列表中,有时候只是被抄送。他认为这些抄送的邮件重要性比自己在收件人列表里的邮件低,因此他要过滤掉这些次要的邮件,优先处理重要的邮件。
现在给你一串抄送列表,请你判断目标用户是否在抄送列表中。

输入描述:

输入有多组数据,每组数据有两行。 第一行抄送列表,姓名之间用一个逗号隔开。如果姓名中包含空格或逗号,则姓名包含在双引号里。总长度不超过512个字符。 第二行只包含一个姓名,是待查找的用户的名字(姓名要完全匹配)。长度不超过16个字符。

输出描述:

如果第二行的名字出现在收件人列表中,则输出“Ignore”,表示这封邮件不重要;否则,输出“Important!”,表示这封邮件需要被优先处理。

示例1

输入

Joe,Kewell,Leon

Joe

"Letendre, Bruce",Joe,"Quan, William"

William

输出

Ignore

Important!

(2)问题分析

给出几个样例感受一下

1)"Zhang Joe","Zhang, Joe",Kewell
Joe
2)"Zhang Joe","Zhang, Joe",Kewell
Zhang Joe
3)"Zhang Joe","Zhang, Joe",Kewell
Zhang,Joe
4)"Zhang Joe","Zhang, Joe",Kewell
Zhang, Joe
5)"Zhang Joe","Zhang, Joe",Kewell
Zhang ,Joe
6)"Zhang Joe","Zhang, Joe",Kewell
Kewel
7)"Zhang Joe","Zhang, Joe",Kewell
Kewell

1)Important!
2)Ignore
3)Important!
4)Ignore
5)Important!
6)Important!
7)Ignore

姓名有两种方式表示,一种是姓名中包含空格或逗号,则姓名包含在双引号里;另一种是没有引号的。所有我们可以使用指针法,首先定义一个指针fast,判断fast指针指向的位置是否是引号。如果fast指向引号,则从fast指针的后一个位置开始寻找下一个引号的位置,然后将中间引号包含的字符串放入集合,因为给出的一个名字是不包含引号的。fast指针指向下一个位置,fast=end+2,去掉第二个引号和两个名字之间的逗号。如果fast不指向引号,则从fast指针的后一个位置开始寻找下一个逗号的位置,然后将中间逗号包含的字符串放入集合。fast指针指向下一个位置,fast=end+1,去掉两个名字之间的逗号。

(3)完整代码

import java.util.*;
/*
*抄送列表
*/
public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);while (scan.hasNext()) {String name = scan.nextLine();int fast = 0;Set<String> s = new HashSet<>();while (fast < name.length()) {if (name.charAt(fast) == '\"') {int end = name.indexOf('\"', fast + 1);String tmp = name.substring(fast + 1, end);s.add(tmp);fast = end + 2;} else {int end = name.indexOf(',', fast + 1);if (end == -1) {end = name.length() - 1;s.add(name.substring(fast, end + 1));break;}String tmp = name.substring(fast, end);s.add(tmp);fast = end + 1;}}name = scan.nextLine();if (s.contains(name) == true) {System.out.println("Ignore");} else {System.out.println("Important!");}}}
}


【Java版oj】day35年会抽奖、抄送列表相关推荐

  1. 【Java版oj】day31美国节日、分解因数

    目录 一.美国节日 (1)原题再现 (2)问题分析 (3)完整代码 二.分解因数 (1)原题再现 (2)问题分析 (3)完整代码 三.DFS深度优先列举所有可能的情况 一.美国节日 (1)原题再现 美 ...

  2. 【Java版oj】day25星际密码、数根

    目录 一.洗牌 (1)原题再现 (2)问题分析 (3)完整代码 二.数根 (1)原题再现 (2)问题分析 (3)完整代码 一.洗牌 (1)原题再现 星际密码__牛客网 星际战争开展了100年之后,No ...

  3. 【Java版oj】逆波兰表达式求值

    目录 一.原题再现 二.问题分析 三.完整代码 一.原题再现 150. 逆波兰表达式求值 有效的算符包括 +.-.*./ .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 注意 两个整数之间的除 ...

  4. 【Java版oj】day33剪花布条、客似云来

    目录 一.剪花布条 (1)原题再现 (2)问题分析 (3)完整代码 二.客似云来 (1)原题再现 (2)问题分析 (3)完整代码 一.剪花布条 (1)原题再现 剪花布条__牛客网         一块 ...

  5. 【Java版oj】day14计算日期到天数转换、幸运的袋子

    目录 一.计算日期到天数转换 (1)原题再现 (2)问题分析 (3)完整代码 二.幸运的袋子 (1)原题再现 (2)问题分析 (3)完整代码 一.计算日期到天数转换 (1)原题再现 计算日期到天数转换 ...

  6. (抄送列表,年会抽奖)笔试强训

    博主简介:想进大厂的打工人 博主主页:@xyk: 所属专栏: JavaEE初阶 目录 文章目录 一.[编程题]抄送列表 二.[编程题]年会抽奖 一.[编程题]抄送列表 链接:抄送列表__牛客网 来源: ...

  7. 错排问题之年会抽奖与抄送列表

    目录 一.编程题 1.年会抽奖 2.抄送列表 二.选择题 1.操作系统中关于竞争和死锁的关系下面描述正确的是? 2.并发是并行的不同表述,其原理相同. 3.在Unix系统中,处于()状态的进程最容易被 ...

  8. java oj题及答案_华为OJ答案(java版)题目2

    华为OJ&答案(java版) 1. 功能:等差数列 2,5,8,11,14.... 输入:正整数N >0 输出:求等差数列前N项和 返回:转换成功返回 0 ,非法输入与异常返回-1 pu ...

  9. 赛马网ACM试题(原杭电oj ACM)java版答案(1000,10001,1002)

    赛马网ACM试题(原杭电OJ ACM试题)答案(java版) Author : Zhang Hailong   Date   : 2015-09-17    HomePage : http://  E ...

最新文章

  1. c 与java 反射性能_谈谈Java 反射的快慢
  2. 第一篇随笔——新的开端
  3. Python-OpenCV——亮度和对比度
  4. Hbase报错ERROR: KeeperErrorCode = NoNode for /hbase/master
  5. [Windows Server] 在 Windows Server 2012 上安裝 .NET Framework 3.5 - 摘自网络
  6. 构造函数还是静态工厂方法?
  7. oracle包如何进入编辑,修改 Oracle 的process和Session
  8. 微信又有大更新!新增多款铃声、腾讯电子签等功能
  9. JAVA正确地自定义比较对象---如何重写equals方法和hashCode方法
  10. python虚函数_Python进阶话题杂谈(十三)纯虚函数与抽象基类
  11. IntelliJ IDEA 激活
  12. html5学习之canvas模块的简单使用,作画三角形、圆形、矩形等
  13. 传统机器学习流程总结
  14. python字典操作首字母与星期的对应_python小课堂10 - 基本数据类型终篇集合和字典...
  15. XMPP 即时通讯协议介绍
  16. ZUC密码算法 - Python实现
  17. 视网膜正常oct图_眼底OCT分层|图文并茂教你看
  18. 在绩效评估中使用 360 反馈
  19. idea 修改项目名称的方法
  20. Matlab中int()函数的使用

热门文章

  1. Part I 空气曲棍球 Chapter6(6.1 The Art of 3D)
  2. Qt控件样式之QSS
  3. 【Gunicorn】Gunicorn安装相关配置脚本
  4. python安装失败0x80070570_Python:“ModuleNotFoundError”,但模块已安装?
  5. c语言-------水仙花数
  6. Android Mediatek bootloader oem锁定和解锁流程
  7. Wigner-Ville 分布
  8. Spring Security渐入佳境(四) -- 第三方应用授权登录
  9. 在cygwin下如何转到D盘
  10. 三个OpenStack自动化部署工具:Devstack,OSA,Kolla对比