[NOIP2008 提高组] 笨小猴

news2024/11/15 4:52:35

题目描述

  笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!

这种方法的具体描述如下:假设 maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果 maxn-minn是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。

输入格式:

一个单词,其中只可能出现小写字母,并且长度小于 100。

输出格式:

  共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word,否则输出 No Answer

  第二行是一个整数,如果输入单词是 Lucky Word,输出 maxn−minn 的值,否则输出 0。

输入输出样例:

输入 #1:

error

输出 #1:

Lucky Word
2

输入 #2:

olympic

输出 #2

No Answer
0

说明/提示

【输入输出样例 1 解释】

单词 error 中出现最多的字母 r 出现了 33 次,出现次数最少的字母出现了 1 次,3-1=2,2 是质数。

【输入输出样例 2 解释】

单词 olympic 中出现最多的字母 i 出现了 1 次,出现次数最少的字母出现了 1 次,1-1=0,0 不是质数。

(本处原题面错误已经修正)

noip2008 提高第一题

思路:

  看到这道题,我们首先就是要找到一个字母出现次数最多是多少,最少出现次数是多少?  题目规定,输入最长为长度100的字符串a,我们可以用strlen(a)函数求出字符串a的长度t。

  我们怎么知道出现次数最多是多少?最少是多少呢?回想我们以前,输入一串数字之后,如何知道最多次数,最少次数?当然是桶了,但是我们输入的是字符啊,这个桶的下标不可能是一个字符。

  对,不可能!但是我们可以进行(int)类型的强制转换啊,我们知道,题目输入的字符串全都是小写字母,我们将输入的每一个字母进行(int)强制转换,变化为桶的下标,字母'a'的ASCII码为97,字母'z'的ASCII码为122,所以这个桶的下标应该在97~122之间,那0~96之间怎么办呢?是空的,那不有些浪费空间了吗。

  这样子来说,我们知道,'a'是26位英文字母的第一个,如果要下标为1,那么我们就可以将'a'-'a'+1当作桶的下标,如果字符是'b',那么'b'-'a'+1就等于2,这样来说,我们这个桶的下标空间就为1~26之间,为了保险起见,我们将桶的空间设置为30,都初始化为0.

  经过桶的计数之后,我们定义Max,Min,从桶的下标0~29之间找最大值和最小值,因为刚开始我们都初始化为0了,如果为0,那么代表输入的字符串里面没有这个编号的字符。所以,我们要判断如果不等于0的话,和Max,Min进行比较,找出最大值和最小值。

  找出最大值和最小值之后,我们要判断两者相减是否是一个质数Max-Min,如果是就输出Lucky Word,然后换行输出Max-Min的值。如果不是就输出No Answer,然后换行输出0.

  那我们怎么判断一个数是不是质数呢?

我们需要写一个判断一个整数是否是一个素数的函数:

            素数是什么呢?
            是除了1和它本身以外没有任何的因子.
            那么我们只要发现它的一个因子就可以说他不是素数,反之,返回true.
            因子是什么?
            一个数除以它的因子余数为0.
            我们可以根据这一点来进行判断,进行for枚举.
            那么范围是多少呢,1不是素数也不是合数,要在一开始进行特判.
            那么初始从=2开始,小于n吗?
            这样也可以,但是还可以进行优化.
            拿25来说,从2枚举到25,是不是浪费了很多.
            我们只要取25的根号,也就是5来当=2;<=5;
            为什么呢?
            因为5是他一个因子中最大的,只要看5以下的就行了.
            我们来细分以下,拿24为例:
                24=1*24;
                24=2*12;
                24=3*8;
                24=4*6;
                你看,我们给24开个根号,值在4~5之间,也就是说循环最多到4.
                循环过程:
                  24%2=0;
                  24%3=0;
                  24%4=0;
                你们可能会疑惑,还有12,8,6没有除余判断呢!
                其实根本没有必要,2,3,4和12,8,6相乘等于24,只要2,3,4除余为0,那么代表着12,8,6和24相除余数为0. 

  这样,我们的基本思路就讲到这里了,接下来给大家看一下代码吧!

代码:

#include<bits/stdc++.h> //万能头文件 
using namespace std; //批准使用std类 
int pd(int x){ //判断一个整数是不是素数 
	bool f=true; //刚开始定义为是素数 
    int k; //循环变量 
    if(x==1||x==0) //1既不是素数也不是合数,要首先排除掉 
	  f=false;  
    for(k=2;k<=sqrt(x);k++){ //循环遍历,sqrt函数是求一个整数开了根号后的值. 
        if(x%k==0){ //素数不能和1除外和他本身除外的任何数余数为0 
            f=false; //代表有一个因数了,就不是素数了 
			break; //退出 
        }
        else 
		  f=true; //是素数 
	}
    return f; //返回 
}
int main(){ //main主函数 
	char a[101]; //定义字符串 
	int f[30]={0},M='z'; //定义桶和最小的字母编号 
	cin.getline(a,101); //输入字符串 
	int t=strlen(a); //求出字符串的长度 
	for(int i=0;i<t;i++) //进行桶计数遍历 
	  f[a[i]-'a'+1]++,M=min(M,a[i]-'a'+1); //找出最小的字母编号和统计字母出现次数 
	int Max=f[M],Min=f[M]; //初始定义为最小字母编号出现次数 
	for(int i=1;i<30;i++){ //遍历桶 
		if(f[i]!=0){ //只要桶不为0 
			if(f[i]>Max) //如果有比Max更大的 
			  Max=f[i]; //赋值 
			if(f[i]<Min) //如果有比Min更小的 
			  Min=f[i]; //赋值 
		}
	}
	if(pd(Max-Min)) //判断最大值减去最小值的差是不是质数 
	  cout<<"Lucky Word\n"<<Max-Min<<endl; //输出 
	else //不是质数 
	  cout<<"No Answer\n0"<<endl; //输出 
	return 0; //结束 
}

总结:

  这道题是2008年提高组第一题,但是难度不算很高,只有普及1~2题的难度,考的知识点也很多:质数的判断,字符桶计数,找数组最大最小值。

  对于一个初学者来说,应该算是挺难的了!

题目链接:

[NOIP2008 提高组] 笨小猴 - 洛谷https://www.luogu.com.cn/problem/P1125

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

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

相关文章

Python 中当前时间表示方法详解

在 Python 中获取当前时间是许多与时间有关的操作的一个很好的起点。一个非常重要的用例是创建时间戳。在本教程中&#xff0c;你将学习如何用 datetime 模块获取、显示和格式化当前时间。我们将学习如何读取当前时间的属性&#xff0c;如年份、分钟或秒。为了使时间更容易阅读…

函数的求导法则——“高等数学”

今天&#xff0c;小雅兰的内容是函数的求导法则&#xff0c;上篇博客我们知道了导数的定义、导数的几何意义及可导与连续关系&#xff0c;这篇博客我们来仔细学习一下求导法则&#xff0c;下面&#xff0c;就让我们进入导数的世界吧 一、函数的和、差、积、商的求导法则 二、反…

Beryl Li 代表 YGG 出席 2023 年世界经济论坛会议

Yield Guild Games&#xff08;YGG&#xff09;联合创始人 Beryl Li 代表 YGG 参加了 2023 年 1 月 16 日至 20 日在瑞士达沃斯举行的 2023 年世界经济论坛年会 &#xff08;WEF23&#xff09;&#xff0c;在全球舞台上分享区块链、通证化、数字资产监管、治理和价值创造的潜力…

C++语法复习笔记-4. C++基本容器

文章目录1.数组声明与定义数组的开闭区间差一错误左闭右开非对称区间原则数组的增删改查一维数组二维数组面向对象的动态数组-vector自动扩容增删改查2. 字符串字符串变量与常量unicode编码字符串指针表示方法指针的表示方法char[]和char* 的区别数组每个值可改指针指向的字符串…

Yann LeCun 新作!大幅超越 MAE,图像语义表示卷出新高度

文&#xff5c;CV酱计算机视觉中&#xff0c;有两种常见的从图像中进行自我监督学习的方法&#xff1a;基于不变性的方法和生成方法。基于不变性的预训练方法优化编码器&#xff0c;使其产生相似的嵌入&#xff0c;用于同一图像的两个或多个视图&#xff0c;其中图像视图通常使…

基于Java+Spring的图书管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

【项目精选】基于Web的机票预订系统

文章目录 1 摘 要2 系统相关技术概述2.1 Java web2.2 三大框架SSM2.3 前端框架AngularJS2.4 数据库MySQL2.5 数据库Redis2.6 开发工具Eclipse 3 需求分析3.1 系统实现目标3.2 系统功能分析3.3 系统用列图 4 系统总体设计4.1 软件架构设计4.2 总体功能模块设计4.3 数据库设计4…

python小游戏——怀念经典坦克大战代码

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿所有的美好&#…

14.集合、泛型、List系列

目录 一.集合类的体系结构 1.1 Collection体系 1.2 Map集合体系 1.3 集合的注意事项 二.泛型 2.1 什么是泛型 2.2 泛型的优点 2.3 泛型可以在哪些地方上定义 2.4 泛型类 2.5 泛型方法 2.6 泛型接口 2.7 泛型通配符 三.Collection集合 3.1 什么是Collection集合 3…

CentOS7没有图形化界面,怎么安装图形化界面

我们在安装CentOS7时&#xff0c;如果选择 “最小化” 安装那么系统就只有命令行界面&#xff0c;但是没有图形化界面&#xff0c;如下图&#xff1a; 解决的完整步骤如下&#xff1a; 1&#xff09;开启CentOS7并登录root用户&#xff08;一定要以root用户登录&#xff0c;其…

windows电脑生成ios证书的方法

在uniapp开发进行云打包的时候&#xff0c;打包Ios应用需要p12格式的私钥证书和证书profile文件。无论使用windows电脑&#xff0c;还是mac电脑&#xff0c;生成ios证书&#xff0c;需要苹果开发者账号&#xff0c;假如你还没有苹果开发者账号&#xff0c;你可以参考下文先到苹…

「跨界选手」郭莎莎:我是怎么从服装设计转向智能家居的

作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn最近几年&#xff0c;全国各地都在上演智能家居创业热。尤其是很多年轻人&#xff0c;从不同的行业转战而来。他们拥有不同的背景、认知和经验&#xff0c;为智能家居的线下渠道注入了多元活力。而本期「智哪儿」专访的采访对…

vue前端框架课程笔记(四)

目录vue中的内置指令v-textv-htmlv-cloakv-oncev-pre汇总自定义指令全局指令与局部指令使用示例生命周期问题引入生命周期函数简介钩子函数图示过程生命周期函数示例本博客参考尚硅谷官方课程&#xff0c;详细请参考 【尚硅谷bilibili官方】 本博客以vue2作为学习目标&#x…

新公链的加速孵化器有哪些值得期待?

媒体、工程师技术支持、VC、机构投资者&#xff0c;有经验的创业者等。Moonbeam Accelerator团结各方力量&#xff0c;帮助创业者做更好的领导者。 Web3的发展瞬息万变&#xff0c;包括Moonbeam自己也在未知的领域探索。作为区块链创业者&#xff0c;我们都有自己固定的思维和…

【redis6】第十一章(秒杀案例)

计数器和人员记录 秒杀页面 <% page language"java" contentType"text/html; charsetUTF-8"pageEncoding"UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loo…

RocketMQ5.0.0消息发送

一、消息消息实体类为org.apache.rocketmq.common.message.Message&#xff0c;其主要属性如下。// 消息所属topic private String topic; // 消息Flag&#xff08;RocketMQ不作处理&#xff09;&#xff0c;即&#xff1a;用户处理 private int flag; // 扩展属性 private Map…

零代码实现EDI标准报文转换

在与客户进行沟通的时候&#xff0c;经常有客户对EDI实施很感兴趣&#xff0c;一方面是客户具有相应的IT基础和技术力量&#xff0c;并且后续可能会有更多合作伙伴的EDI接入&#xff0c;因此客户有自主实施的想法&#xff1b;另一方面也可以在一定程度上为企业节约成本。 知行…

谷歌seo排名需要的链接数量?谷歌seo排名需要多久?

本文主要分享要实现谷歌排名需要多少条英文外链&#xff0c;以及时间成本的预估。 本文由光算创作&#xff0c;有可能会被修改或剽窃&#xff0c;我们佛系对待这种行为吧。 谷歌seo排名需要的链接数量是多少&#xff1f; 答案是&#xff1a;需要1000~2000条GPB外链 为什么一…

对数据中台的梳理与思考

Gartmer:《数据中台在中国已经接近炒作的顶峰》 PowerData&#xff1a;接近顶峰?那就说明还有上升的空间嘛 本篇文章聊聊数据中台爆火背后的逻辑。 一、概念篇 1、什么是中台 中台是将系统的通用化能力进行打包整合&#xff0c;通过接口的形式赋能到外部系统&#xff0c;从而…

嵌入式Linux-线程的回收/取消/分离

1. 线程的回收 1.1 回收线程的概念 春节七天连假已经过完啦&#xff0c;也该回收一下我们放假的线程了&#xff01; 听过很多回收旧手机、旧冰箱和旧彩电…&#xff0c;那么回收线程又是什么呢&#xff1f; 在父、子进程当中&#xff0c;父进程可通过 wait()函数&#xff08;…