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

news2024/9/22 23:17:36

目录

 一、年会抽奖 

(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的阶乘\AA _{n}^{n}(比如三个人,甲先从3张中抽,乙再从2张中抽,丙最后从1张里抽,所有可能的结果为3*2*1=6)

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

f(n)=C_{n-1}^{1}*(f(n-2)+f(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!");
            }
        }
    }
}


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++ 命名空间 输入输出 缺省参数 引用 函数重载

在学习C之前&#xff0c;我们要先知道C和C是向上兼容的&#xff0c;也就是说&#xff0c;在cpp文件中既可以写入C的代码&#xff0c;也可以写C的代码&#xff0c;在日常编写代码中&#xff0c;经常会出现C和C混编的情况。 此博客都是在 C 的缺陷的基础之上 整理 C 中对其的优化…

PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测

文章目录一、强大的 hub 模块1. hub 模块的使用2. hub 模块的代码演示二、搭建神经网络进行气温预测1. 数据信息处理2. 数据图画绘制3. 构建网络模型4. 更简单的构建网络模型本文参加新星计划人工智能(Pytorch)赛道&#xff1a;https://bbs.csdn.net/topics/613989052 一、强…

机器学习——回归与聚类算法

线性回归 广义的线性模型 不仅是自变量是一次方的是线性模型&#xff0c;参数是一次方的也是线性模型&#xff0c;比如&#xff1a; 总结&#xff1a;线性关系的一定是线性模型&#xff0c;线性模型的不一定是线性关系。 损失函数 优化损失 求解模型中的w&#xff0c;使得…

SeNet论文解读/总结

此文章为深度学习在计算机视觉领域的图片分类经典论文SeNet&#xff08;Squeeze-and-Excitation Networks&#xff09;论文总结。 此系列文章是非常适合深度学习领域的小白观看的图像分类经典论文。系列文章如下&#xff1a; AlexNet&#xff1a;AlexNet论文解读/总结_alexnet…

uniapp-搜索配置

自定义搜索组件 1.定义组件的 UI 结构: <template><!-- 通过属性绑定的形式&#xff0c;为 .my-search-container 盒子和 .my-search-box 盒子动态绑定 style 属性 --><view class"my-search-container" :style"{background-color: bgcolor}&q…

《花雕学AI》23:中文调教ChatGPT的秘诀:体验测试与通用案例,解锁无限有趣玩法!

引言&#xff1a; 你有没有想过和一台智能机器人聊天&#xff1f;你有没有想过让一台智能机器人为你创作诗歌、故事或歌曲&#xff1f;你有没有想过让一台智能机器人陪你玩游戏、学习或社交&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定会对ChatGPT感兴趣。 ChatG…

Hystrix详解

前言 Hystrix基于Feign&#xff0c;想熟悉Hystrix&#xff0c;必须先熟悉Feign。 Feign&#xff08;简介和使用&#xff09;&#xff1a; Feign&#xff08;简介和使用&#xff09;_长头发的程序猿的博客-CSDN博客 Hystrix简介 hystrix对应的中文名字是“豪猪”&#xff0c…

Android开发 Camera2获取输出SurfaceTexture

目录 一、Camera2概述 1 Pipeline 2 CameraManager 3 CameraDevice 4 CameraCharacteristics 5 CameraCaptureSession 6 CaptureRequest 7 Surface 8 CaptureResult 三、Camera2的特性 1 Camera2 才支持的高级特性 2 Camera1 迁移到 Camera2 二、示例源码 一、Came…

Honggfuzz Linux arch_clone 源码阅读 (setjmp, clone)

Honggfuzz Linux arch_clone 源码阅读 &#xff08;setjmp, clone&#xff09; 阅读 Honggfuzz 系统架构相关源码&#xff0c;在创建子进程部分遇到了几个问题&#xff0c;经过研究得以解决&#xff0c;在此记录。 Source Code 代码节选自linux/arch.c&#xff0c;已添加注释&…

RabbitMq 消息可靠性问题(一) --- publisher发送时丢失

前言 消息从生产者发送到exchange, 再到 queue, 再到消费者。这个过程中有哪些有消息丢失的可能性呢&#xff1f; 发送时丢失&#xff1a; 生产者发送的消息未送达 exchange消息到达 exchange 后未到达 queue MQ 宕机&#xff0c;queue将消息丢失consumer 接收到消息后未消费…

聊聊如何运用JAVA注解处理器(APT)

什么是APT APT&#xff08;Annotation Processing Tool&#xff09;它是Java编译期注解处理器&#xff0c;它可以让开发人员在编译期对注解进行处理&#xff0c;通过APT可以获取到注解和被注解对象的相关信息&#xff0c;并根据这些信息在编译期按我们的需求生成java代码模板或…

基于DistFlow的含分布式电源配电网优化模型【IEEE39节点】(Python代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

SpringBoot【基础篇】---- SSMP整合综合案例

SpringBoot【基础篇】---- SSMP整合综合案例1. 模块创建2. 实体类开发3. 数据层开发----基于CRUD查看MP运行日志查看 MP 的运行日志4. 数据层开发----分页功能制作5. 数据层开发----条件查询功能制作6. 业务层开发业务层快速开发7. 表现层开发8. 表现层消息一致性处理9. 前后端…

STC32G单片机内置ADC及应用编程

一 STC32G单片机内置ADC模块简介 STC32G单片机内部集成了一个12位高速ADC转换器&#xff0c;ADC的最高时钟频率为系统频率的1/2。其输入通道多达15个&#xff08;第15通道为专门测量内部1.19V参考信号源的通道&#xff09;&#xff0c;可分时切换使用。 STC15系列单片机内置AD…

AES加密

来源&#xff1a;链接: b站up主可厉害的土豆 &#xff08;据评论区说图片中有计算错误&#xff0c;但是过程是对的。只是了解过程问题不大&#xff0c;专门研究这一块的话自己可以看视频算一下&#xff09; 准备 首先&#xff0c;明文是固定长度 16字节 128位。 密钥长度可以…

C++语法(18)---- set和map

C语法&#xff08;17&#xff09;---- 二叉搜索树_哈里沃克的博客-CSDN博客https://blog.csdn.net/m0_63488627/article/details/130174864 目录 1.set的介绍 1.set使用 1.基本结构 2.insert 3.erase 4.find 5.count 2.multiset 1.count 2.find 2.map的介绍 1.map …

zookeeper + kafka集群搭建详解

目录 1.消息队列介绍 1.为什么需要消息队列 &#xff08;MO&#xff09; 2.使用消息队列的好处 3.消息队列的两种模式 2.Kafka相关介绍 1.Kafka定义 2.Kafka简介 3. Kafka的特性 3.Kafka系统架构 1. Broker&#xff08;服务器&#xff09; 2. Topic&#xff08;一个队…

GaussDB数据库存储过程介绍

文章目录一、前言二、GaussDB中的定义三、存储过程的使用场景四、存储过程的使用优缺点五、存储过程的示例及示例解析1、GaussDB存储过程语法格式2、GaussDB存储过程语法示例3、存储过程的调用方法七、总结一、前言 华为云数据库GaussDB是一款高性能、高安全性的云原生数据库&…

链表基础知识

1.链表必知必会 什么是链表? 链表是一种通过指针串联在一起的线性结构&#xff0c;每一个节点由两部分组成&#xff0c;一个是数据域一个是指针域&#xff08;存放指向下一个节点的指针&#xff09;&#xff0c;最后一个节点的指针域指向null&#xff08;空指针的意思&#…

23北京邮电大学备考经验

目录【写在前面】本科成绩择校历程英语复习数学复习政治复习专业课复习其它建议笔记复盘压力处理恋爱关系【写在最后】【写在前面】 初试成绩&#xff1a; 本科成绩 总体&#xff1a;浙江某双非学校的软件工程专业、综合测评成绩班级前两名、浙江省省级优秀毕业生、发表过论…