C语言竞赛

news2024/11/17 13:53:16

目录

1059:C语言竞赛

输入格式:

输出格式:

输入样例:

输出样例:

思路:

  1.结构:

  2.判断素数

  3.输出宽度调整

代码:

时间复杂度:

总结:

题目链接:


1059:C语言竞赛

C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:

  • 0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。
  • 1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!
  • 2、其他人将得到巧克力。

给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。

输入格式:

输入第一行给出一个正整数 N(≤104),是参赛者人数。随后 N 行给出最终排名,每行按排名顺序给出一位参赛者的 ID(4 位数字组成)。接下来给出一个正整数 K 以及 K 个需要查询的 ID。

输出格式:

对每个要查询的 ID,在一行中输出 ID: 奖品,其中奖品或者是 Mystery Award(神秘大奖)、或者是 Minion(小黄人)、或者是 Chocolate(巧克力)。如果所查 ID 根本不在排名里,打印 Are you kidding?(耍我呢?)。如果该 ID 已经查过了(即奖品已经领过了),打印 ID: Checked(不能多吃多占)。

输入样例:

6
1111
6666
8888
1234
5555
0001
6
8888
0001
1111
2222
8888
2222

输出样例:

8888: Minion
0001: Chocolate
1111: Mystery Award
2222: Are you kidding?
8888: Checked
2222: Are you kidding?

代码长度限制

16 KB

时间限制

200 ms

内存限制

64 MB

思路:

  1.结构:

        因为这道题的各种数据较多,我们也可以写一个结构:
            struct 结构名{
                string 奖品.
                bool 是否是一个素数.
                bool 是否已经被查找过了.
                int 这个学生的排名. 
            }
            因为题目规定ID最大是9999,所以我们可以定一个长度为10000的结构数组a.

  2.判断素数

现在我们要写一个判断是否是一个素数的函数:
            素数是什么?
            除了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. 
        素数的判断写完了之后,只差判断询问的这个学生是存在还是不存在:
            我们可以写一个find查找函数,找到了就返回true,这样可以,但是速度太慢了.
            我们其实可以在常数时间内完成,也就是O(1)的时间:
                我们在结构体中的一个变量初始化一个标记,如果输入了一个学生,就把这个学生的标记擦除!
                判断的时候只需要看一下是否有这个标记就可以了.

  3.输出宽度调整

在询问中,我们输出ID的时候,可以利用以下几点: 
            setw函数设置宽度.
            setfill函数设置如果宽度不足,就补充一个字符.
            因为题目要求是四位,所以我们可以设置宽度为4,如果不足四位,补充字符'0'.
            因为根据题目要求,必须要输出四位的数字,哪怕是1也要输出0001,这里我们将要输出的整数看作s.
            这个语句的结果就是看s的长度是多少,如果是4位,那么直接就输出s. 
            如果没有四位,就把空格的地方左边来补充'0'输出s.
            这里不存在超过四位,因为题目已经说明了输入的是一个四位整数. 

代码:

//1059:C语言竞赛
//正解: 
#include<bits/stdc++.h>
using namespace std;
typedef struct Student{ //定义结构体学生 
	string j; //学生获得的奖 
	bool f,c; //f为学生的排名是否为素数,c为是否ID已经查过了 
	int i; //代表学生的排名 
	Student(){ //构造函数初始化 
		j="-1"; //做一个标记,以后如果有询问不存在的学生,j就是-1,就很好判断了 
		f=false; //刚开始定义为不是素数 
		c=false; //刚开始定义为还没有查过 
		i=0; //初始排名都为0 
	}
}st; //简单名称 
st a[10000]; //定义学生a,因为学生的ID最大是9999,所以要定10000的数组 
int pd(int x){ //判断一个整数是不是素数 
	bool f=true; //刚开始定义为是素数 
    int k; //循环变量 
    if(x==1) //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(){
	int n;
	cin>>n; //输入n 
	for(int i=1;i<=n;i++){ //输入n个数 
		int s;
		cin>>s;
		a[s].i=i; //排名是按输入来的 
		if(pd(a[s].i)) //如果是素数 
		  a[s].f=true,a[s].j="Minion"; //那么f为真,将奖品设为"小黄人" 
		else if(a[s].i==1) //如果排名为1 
		  a[s].j="Mystery Award"; //奖品就是"神秘大奖" 
		else //如果以上两个都不是 
		  a[s].j="Chocolate";  //奖品就只能是"巧克力" 
	}
	int k;
	cin>>k; //询问次数 
	while(k--){ //询问输入 
		int s;
		cin>>s; //循环 
		cout<<setw(4)<<setfill('0')<<s<<": ";//设置宽度和宽度不足的补充 
		if(a[s].c==true) //如果已经查过了 
		  cout<<"Checked"<<endl;
		else if(a[s].j=="-1") //如果没有这个学生 
		  cout<<"Are you kidding?"<<endl;
		else //有这个学生 
		  cout<<a[s].j<<endl,a[s].c=true; //输出奖品,将c设置为真,代表查过了 
	}
	return 0;
}

时间复杂度:

O(k+n*(sqrt(1)+.......+sqrt(n));
相当于O(k+nlogn);

总结:

  这道题运用了结构体,流操作算子(设置宽度),素数判断的知识,结合起来,对于初学者来说,还是比较难的!

题目链接:

PTA | 程序设计类实验辅助教学平台千名教师建设,万道高质量题目,百万用户拼题的程序设计实验辅助教学平台https://pintia.cn/problem-sets/994805260223102976/exam/problems/994805269828059136 

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

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

相关文章

vue3+vite使用element-plus

前言&#xff1a; vue3vite的项目中使用 element-plus的教程。 官方地址&#xff1a; 安装 | Element Plusa Vue 3 based component library for designers and developershttps://element-plus.gitee.io/zh-CN/guide/installation.html#%E6%B5%8F%E8%A7%88%E5%99%A8%E7%9B%B…

考研408数据结构 · 开端

引言数据结构在学什么对C语言掌握要求数据结构三要素逻辑结构数据运算存储结构数据结构在学什么 如何把问题信息化 场景&#xff1a;现在需要将1000本不同类型的书摆放到图书馆的书架上。研究问题&#xff1a;采取什么办法摆放&#xff1f;方法有&#xff1a; ① 不管不顾从头…

进程优先级与环境变量

目录 一、进程优先级 1.优先级与权限 2.查看进程优先级 3.PRI与NI 4.修改进程的优先级 5.进程优先级的注意事项 二、进程的其他概念 1.竞争性 2.独立性 3.并行和并发 三、环境变量 1.什么是环境变量 2.环境变量的分类 3.查看环境变量内容 &#xff08;1&#xf…

uniapp easycom教程

easycom 是 uniapp 的一种组件自动引入的规则&#xff0c;使用这种规则可以使满足规则的组件无需注册直接使用。 接下来我们来看一眼效果 这里可以看到我并没有进行组件注册而是直接使用了组件&#xff0c;这样的效果就是通过 easycom 的自定义规则来实现的。 来看一眼我的自…

pandas模块使用介绍

pandas模块使用介绍1.pandas简介 ​ pandas 是基于NumPy 的一种工具&#xff0c;该工具是为解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型&#xff0c;提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。…

专访 | 徐鹏程:开源,就是酷

OpenMLDB&#xff1a; 请先来一段自我介绍吧。 徐鹏程&#xff1a; 我本科就读于上海交通大学&#xff0c;硕士在伊利诺伊大学香槟分校&#xff0c;专业都是电子与计算机工程&#xff0c;感兴趣的方向有机器学习在生物信息等领域的应用、计算机系统与架构、分布式系统等。平时…

Java数据结构与Java算法学习Day08---关于树的深度学习(简略笔记记录)

目录 一、平衡树 119 1.1 2-3查找树 119 1.1.1 2-结点和3-结点的含义 119 1.1.2查找 120 1.2 2-3查找树的插入 121 1.2.1 向2-结点中插入新建 121 1.2.2向一棵树只含有一个3-结点的树中插入新建 121 1.2.3向一个父结点为2-结点的3-结点中插入新建 121 1.2.4向一个父…

数据库建表设计技巧

1.名字 建表的时候&#xff0c;给表、字段和索引起个好名字&#xff0c;真的太重要了。 1.1 见名知意 名字就像表、字段和索引的一张脸&#xff0c;可以给人留下第一印象。 好的名字&#xff0c;言简意赅&#xff0c;见名知意&#xff0c;让人心情愉悦&#xff0c;能够提高…

基于go-micro微服务的实战-zipkin实现全链路追踪(九)

基于go-micro微服务的实战-zipkin实现全链路追踪(九) 文章最后附带完整代码 Zipkin是 Twitter 的一个开源项目&#xff0c;基于 Google Dapper实现。可以使用它来收集各个服务器上请求链路的跟踪数据。除了面向开发的API接口之外&#xff0c;它也提供了方便的 UI 组件帮助我们…

代码随想录算法训练营第五十六天| LeetCode583. 两个字符串的删除操作、LeetCode72. 编辑距离

一、LeetCode583. 两个字符串的删除操作 1&#xff1a;题目描述&#xff08;583. 两个字符串的删除操作&#xff09; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 2&#xff1a;解题思…

细数一下Java中反射机制及反射的优缺点

1. 反射的概念 反射 机制指的是&#xff0c;程序在运行时能够获取自身的信息。在 java 中只要给定类的名字&#xff0c;就能够获取类的所有属性和方法。 反射是 Java 中很多高级特性的基础&#xff0c;比如 注解、动态代理 以及 Spring Ioc、AOP 等技术都需要借助反射来实现。…

再见 if…elif…!使用 Python 装饰器轻松搞定!

大家好&#xff0c;今天在 Github 阅读 EdgeDB[1] 的代码&#xff0c;发现它在处理大量if…elif…else的时候&#xff0c;巧妙地使用了装饰器&#xff0c;方法设计精巧&#xff0c;分享给大家一下&#xff0c;欢迎收藏学习&#xff0c;喜欢点赞支持&#xff0c;技术交流见文末。…

DJ13-1 汇编语言程序设计-4

目录 1. 带显示的键盘输入&#xff08;1 号功能&#xff09; 2. 不带显示的键盘输入&#xff08;8 号功能&#xff09; 3. 字符串输入&#xff08;0AH 号功能&#xff09; 4. 字符显示&#xff08;2 号功能&#xff09; 5. 字符串显示&#xff08;9 号功能&#xff09; 6…

【C++哈希表的基础使用记录】

前言 今天重新打开力扣&#xff0c;看到以前的签到题两数之和&#xff0c;以前的方法是双指针暴力解法&#xff0c;偶然看到了哈希表的方法&#xff0c;让我想起了iOS的字典&#xff0c;也顺带学习了哈希表的使用&#xff0c;我这里仅仅限于自己用来写算法题&#xff0c;作以记…

从源码角度看React-Hydrate原理

React 渲染过程&#xff0c;即ReactDOM.render执行过程分为两个大的阶段&#xff1a;render 阶段以及 commit 阶段。React.hydrate渲染过程和ReactDOM.render差不多&#xff0c;两者之间最大的区别就是&#xff0c;ReactDOM.hydrate 在 render 阶段&#xff0c;会尝试复用(hydr…

西门子1200PLC中OB,FC,FB,DB

1.基础知识 临时变量&#xff1a;存储在L堆栈中&#xff0c;块执行结束后&#xff0c;变量消失&#xff1b; 静态变量&#xff1a;存储在背景数据块中&#xff0c;块调用结束后&#xff0c;变量被保留&#xff1b; &#xff08;1&#xff09;OB组织块 OB1&#xff08;MAIN&a…

微信小程序开发笔记 进阶篇⑤——getPhoneNumber 获取用户手机号码(基础库 2.21.2 之前)

文章目录一、前言二、前端代码wxml三、前端代码js四、后端java五、程序流程六、参考一、前言 大部分微信小程序开发者都会有这样的需求&#xff1a;获取小程序用户的手机号码。但是&#xff0c;因为小程序用户的手机号码属于重要信息&#xff0c;为了安全&#xff0c;所以需要如…

[附源码]Python计算机毕业设计SSM基于智能推荐的胖达大码服装定制网(程序+LW)

[附源码]Python计算机毕业设计SSM基于智能推荐的胖达大码服装定制网&#xff08;程序LW) 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xf…

MacOS卸载自带软件

解锁系统SIP 按CommandR重启电脑&#xff0c;进入后点击上方的实用工具-终端在弹出的终端窗口中输入 csrutil disable下方提示 Successfully&#xff0c;表示解锁成功输入 reboot 重启电脑 卸载自带软件 重启电脑后&#xff0c;打开终端输入sudo -i输入管理员密码分别输入以…

来面试测试岗就这么简单9道题,我刷掉了90%的软件测试员。

人往高处走水往低处流&#xff0c;今天已经是十二月了&#xff0c;“金三银四”招聘季还会远吗&#xff1f; 远观2021年的招聘季&#xff0c;在资本寒冬的映照下&#xff0c;的确萧条了不少&#xff0c;年底裁员、取消年终奖、末尾淘汰制等热门制度&#xff0c;让很多人陷入了…