数据结构与算法
吃口雪花
这个作者很懒,什么都没留下…
展开
-
求两个数的最大公约数(五种方法)
求两个数的最大公约数一、 问题描述与分析二、 算法设计(或算法步骤)1. 欧几里得算法2. 枚举法3. 公共因子积4. 更相减损术5. Stein算法求两个数的最大公约数一、问题描述与分析设有 m 和 n 两个正整数,求 m 和 n 的最大公因子。二、算法设计(或算法步骤)欧几里得算法算法简介欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著...原创 2019-09-03 16:56:20 · 34012 阅读 · 8 评论 -
PAT (Basic Level) Practice (中文)1018 锤子剪刀布 (20 分)(C++实现)
题目描述:大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第 1 行给出正整数 N(≤105)N(≤10^5)N(≤105),即双方交锋的次数。随后 N 行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C 代表“锤子”、J 代表“剪刀”、B 代表“布”,第...原创 2019-07-20 20:32:43 · 165 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1010 一元多项式求导 (25 分)(Java实现)
题目描述:设计函数求一元多项式的导数。(注:xnx^nxn (n为整数)的一阶导数为nxn−1nx^{n−1}nxn−1 。)输入格式:以指数递降方式输入多项式非零项系数和指数(绝对值均为不超过 1000 的整数)。数字间以空格分隔。输出格式:以与输入相同的格式输出导数多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。注意“零多项式”的指数和系数都是 ...原创 2019-07-17 23:10:34 · 237 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1059 C语言竞赛 (20 分)(C实现)
题目描述:C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:0、冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。1、排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!2、其他人将得到巧克力。给定比赛的最终排名以及一系列参赛者的 ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数 N(≤...原创 2019-07-20 17:31:19 · 146 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1092 最好吃的月饼 (20 分)(C实现)
题目描述:月饼是久负盛名的中国传统糕点之一,自唐朝以来,已经发展出几百品种。图片来源(https://pintia.cn/problem-sets/994805260223102976/problems/1071785779399028736)若想评比出一种“最好吃”的月饼,那势必在吃货界引发一场腥风血雨…… 在这里我们用数字说话,给出全国各地各种月饼的销量,要求你从中找出销量冠军,认定为...原创 2019-07-24 22:56:06 · 145 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1054 求平均值 (20 分)(Java实现)
题目描述:本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。输入格式:输入第一行给出正整数 N(≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。输出格式:对每个非法输入,在一行中输出 ER...原创 2019-07-24 22:18:16 · 175 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1067 试密码 (20 分)(Java实现)
题目描述:当你试图登录某个系统却忘了密码时,系统一般只会允许你尝试有限多次,当超出允许次数时,账号就会被锁死。本题就请你实现这个小功能。输入格式:输入在第一行给出一个密码(长度不超过 20 的、不包含空格、Tab、回车的非空字符串)和一个正整数 N(≤ 10),分别是正确的密码和系统允许尝试的次数。随后每行给出一个以回车结束的非空字符串,是用户尝试输入的密码。输入保证至少有一次尝试。当读到一...原创 2019-07-24 22:04:38 · 194 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1033 旧键盘打字 (20 分)(Java实现)
题目描述:旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及坏掉的那些键,打出的结果文字会是怎样?输入格式:输入在 2 行中分别给出坏掉的那些键、以及应该输入的文字。其中对应英文字母的坏键以大写给出;每段文字是不超过 10510^5105个字符的串。可用的字符包括字母[a-z, A-Z] 数字 0-9 以及下划线 _(代表空格), . -...原创 2019-07-17 21:14:47 · 219 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1046 划拳 (15 分)(Java实现)
题目描述:划拳是古老中国酒文化的一个有趣的组成部分。酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字。如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒。两人同赢或两人同输则继续下一轮,直到唯一的赢家出现。下面给出甲、乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒。输入格式:输入第一行先给出一个正整数 N(≤100),随后 N 行,每行给出一轮划拳...原创 2019-07-17 20:57:21 · 160 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1032 挖掘机技术哪家强 (20 分)(C实现)
题目描述:为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛。现请你根据比赛结果统计出技术最强的那个学校。输入格式:输入在第 1 行给出不超过 10510^5105 的正整数 N,即参赛人数。随后 N 行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从 1 开始连续编号)、及其比赛成绩(百分制),中间以空格分隔。输出格式:在一行中给出总得分最高的学校的编号...原创 2019-07-17 20:46:11 · 93 阅读 · 0 评论 -
PAT (Advanced Level) Practice1001 A+B Format (20 分)(Java实现)
Problem DescriptionCalculate a+b and output the sum in standard format – that is, the digits must be separated into groups of three by commas (unless there are less than four digits).Input Specifica...原创 2019-07-24 20:25:22 · 188 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1002 写出这个数 (20 分)(Java实现)
其他题目答案(持续更新)https://blog.csdn.net/qq_39424178/article/details/98243681题目描述:读入一个正整数 n,计算其各位数字之和,用汉语拼音写出和的每一位数字。输入格式:每个测试输入包含 1 个测试用例,即给出自然数 n 的值。这里保证 n 小于 1010010^{100}10100。输出格式:在一行内输出 n 的各位数字之...原创 2019-08-02 21:41:07 · 190 阅读 · 0 评论 -
PAT (Advanced Level) Practice1006 Sign In and Sign Out (25 分)(Java示例)
其他题解(持续更新)https://blog.csdn.net/qq_39424178/article/details/98111146Problem DescriptionAt the beginning of every day, the first person who signs in the computer room will unlock the door, and the la...原创 2019-08-10 21:43:39 · 265 阅读 · 0 评论 -
PAT (Advanced Level) Practice1008 Elevator (20 分)(Java实现)
Problem DescriptionThe highest building in our city has only one elevator. A request list is made up with N positive numbers. The numbers denote at which floors the elevator will stop, in specified o...原创 2019-08-14 19:33:37 · 139 阅读 · 0 评论 -
PAT (Advanced Level) Practice1003 Emergency (25 分)(Java实现)
Problem DescriptionAs an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in...原创 2019-08-01 21:47:49 · 319 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1069 微博转发抽奖 (20 分)(Java实现)
题目描述:小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。输入格式:输入第一行给出三个正整数 M(≤ 1000)、N 和 S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从 1 开始)。随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符、不包含空格回车的非空字符串)...原创 2019-07-27 18:21:33 · 162 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1020 月饼 (25 分)(Java实现)
题目描述:月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是...原创 2019-07-26 21:41:37 · 264 阅读 · 0 评论 -
PAT (Advanced Level) Practice1002 A+B for Polynomials (25 分)(Java实现)
Problem DescriptionThis time, you are supposed to find A+B where A and B are two polynomials.Input Specification:Each input file contains one test case. Each case occupies 2 lines, and each line co...原创 2019-07-31 20:51:10 · 212 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1055 集体照 (25 分)(Java实现)
题目描述:集体照时队形很重要,这里对给定的 N 个人 K 排的队形设计排队规则如下:每排人数为 N/K(向下取整),多出来的人全部站在最后一排;后排所有人的个子都不比前排任何人矮;每排中最高者站中间(中间位置为 m/2+1,其中 m 为该排人数,除法向下取整);每排其他人以中间人为轴,按身高非增序,先右后左交替入队站在中间人的两侧(例如5人身高为190、188、186、1...原创 2019-07-22 23:57:29 · 234 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1074 宇宙无敌加法器 (20 分)(Java实现)
题目描述:地球人习惯使用十进制数,并且默认一个数字的每一位都是十进制的。而在 PAT 星人开挂的世界里,每个数字的每一位都是不同进制的,这种神奇的数字称为“PAT数”。每个 PAT 星人都必须熟记各位数字的进制表,例如“……0527”就表示最低位是 7 进制数、第 2 位是 2 进制数、第 3 位是 5 进制数、第 4 位是 10 进制数,等等。每一位的进制 d 或者是 0(表示十进制)、或者是...原创 2019-07-26 21:17:58 · 198 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1048 数字加密 (20 分)(Java实现)
题目描述:本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。输入格式:输入在一行中依次给出 A 和 B,均为不超...原创 2019-07-22 12:56:16 · 167 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1019 数字黑洞 (20 分)(Java实现)
题目描述:给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到7766 - 6677 = 10899810 - 0189 = 96219621 -...原创 2019-07-24 18:56:27 · 111 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1088 三人行 (20 分)(Java实现)
题目描述:子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。请你指出谁比你强应“从之”,谁比你弱应“改之”。输入格式:输入在一行中给出三个数,依次为:M(你自己的能力值)、X 和 Y。三个数字均...原创 2019-07-24 18:54:54 · 258 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1053 住房空置率 (20 分)(Java实现)
题目描述:在不打扰居民的前提下,统计住房空置率的一种方法是根据每户用电量的连续变化规律进行判断。判断方法如下:在观察期内,若存在超过一半的日子用电量低于某给定的阈值 e,则该住房为“可能空置”;若观察期超过某给定阈值 D 天,且满足上一个条件,则该住房为“空置”。现给定某居民区的住户用电量数据,请你统计“可能空置”的比率和“空置”比率,即以上两种状态的住房占居民区住房总套数的百...原创 2019-07-17 20:15:14 · 179 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1038 统计同成绩学生 (20 分)(C实现)
题目描述:本题要求读入 NNN 名学生的成绩,将获得某一给定分数的学生人数输出。输入格式:输入在第 1 行给出不超过 10510^5105 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。输出格式:在一行中按查询顺序给出得分等于指定分数的学生人数,中间...原创 2019-07-18 22:57:16 · 137 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1037 在霍格沃茨找零钱 (20 分)(Java实现)
题目描述:如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易。”现在,给定哈利应付的价钱 P 和他实付的钱 A,你的任务是写一个程序来计算他应该被找的零钱。输入格式:输入在 1 行中分别给出 P 和 A,格式为 Galleon.Sickle.Knut,其间用...原创 2019-07-18 22:40:29 · 174 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1022 D进制的A+B (20 分)(Java实现)
题目描述:输入两个非负 10 进制整数 A 和 B (≤230−1)(≤2^{30} −1)(≤230−1),输出 A+B 的 D (1<D≤10)(1<D≤10)(1<D≤10)进制数。输入格式:输入在一行中依次给出 3 个整数 A、B 和 D。输出格式:输出 A+B 的 D 进制数。输入样例:123 456 8输出样例:1103...原创 2019-07-18 20:56:39 · 103 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1014 福尔摩斯的约会 (20 分)(Java实现)
题目描述:大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE3485djDkxh4hhGE3485djDkxh4hhGE 2984akDfkkkkggEdsb2984akDfkkkkggEdsb2984akDfkkkkggEdsb KaTeX parse error: Expected 'EOF', got '&' at position 2: s&̲...原创 2019-07-18 18:37:57 · 122 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1061 判断题 (15 分)
题目描述判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分。输入格式:输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人数和判断题数量。第二行给出 M 个不超过 5 的正整数,是每道题的满分值。第三行给出每道题对应的正确答案,0 代表“非”,1 代表“是”。随后 N 行,每行给出一个学生的解答。数字间均以空格分隔。输出格式:按照输入的顺...原创 2019-07-15 22:30:22 · 166 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1031 查验身份证 (15 分)
题目描述一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:Z:0 1 2 3 4 5 6 7 8 9 10M:1 0 X 9 8 7 6 5 4 3 2现在给...原创 2019-07-06 00:02:17 · 96 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文) 1021 个位数统计 (15 分)
题目描述给定一个K位整数N=dk−110k−1+d1101+d0(0<=di<=9,i=0,...,k−1,dk−1>0)N = d_{k-1}10^{k-1} + d_110^1 + d_0(0 <= d_i <= 9, i = 0,...,k - 1, d_{k - 1} > 0)N=dk−110k−1+...原创 2019-06-10 22:03:50 · 141 阅读 · 0 评论 -
PAT 1042 字符统计 (20 分)
题目描述请编写程序,找出一段给定文字中出现最频繁的那个英文字母。输入格式:输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。输出格式:在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。输...原创 2019-06-09 23:07:39 · 129 阅读 · 0 评论 -
几大排序算法
几大排序算法直接插入排序算法描述从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置重复步骤3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后重复步骤2~5算法实现(Java)/** * 直接插入排序 */public void insertSort(int...原创 2019-06-08 20:27:01 · 104 阅读 · 0 评论 -
判断一颗二叉树是否是完全二叉树
判断一颗二叉树是否是完全二叉树方法一,采取标记的方法非完全二叉树的三种情况思路分析:通过层序遍历来遍历树中的每一个非空结点遍历到的每一个结点都分为四种情况1.既有左孩子也有右孩子操作:将左孩子和右孩子入队列2.只有左孩子操作:1.首先判断标记是否处于激活状态,如果标记处于激活状态,直接返回 false2.满足标记条件,将标记设置为激活状态3.只有...原创 2019-05-23 22:56:03 · 7944 阅读 · 3 评论 -
PAT (Basic Level) Practice (中文)1081 检查密码 (15 分)(Java实现)
题目描述本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能。该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母、数字和小数点 .,还必须既有字母也有数字。输入格式:输入第一行给出一个正整数 N(≤ 100),随后 N 行,每行给出一个用户设置的密码,为不超过 80 个字符的非空字符串,以回车结束。输出格式:对每个用户的密码,在一行中输出系统反馈信息,分以下5...原创 2019-07-16 22:21:11 · 227 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1084 外观数列 (20 分)(Java实现)
题目描述外观数列是指具有以下特点的整数序列:d,d1,d111,d113,d11231,d112213111,...d, d1, d111, d113, d11231, d112213111, ...d,d1,d111,d113,d11231,d112213111,...它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所...原创 2019-07-16 22:59:33 · 235 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1056 组合数的和 (15 分)(Java实现)
题目描述:给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字。要求所有可能组合出来的 2 位数字的和。例如给定 2、5、8,则可以组合出:25、28、52、58、82、85,它们的和为330。输入格式:输入在一行中先给出 N(1 < N < 10),随后给出 N 个不同的非 0 个位数字。数字间以空格分隔。输出格式:输出所有可能组合出来的...原创 2019-07-19 23:25:37 · 171 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1049 数列的片段和 (20 分)(C实现)
题目描述:给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列 { 0.1, 0.2, 0.3, 0.4 },我们有 (0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这 10 个片段。给定正整数数列...原创 2019-07-19 23:07:23 · 170 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1071 小赌怡情 (15 分)(Java实现)
题目描述:常言道“小赌怡情”。这是一个很简单的小游戏:首先由计算机给出第一个整数;然后玩家下注赌第二个整数将会比第一个数大还是小;玩家下注 t 个筹码后,计算机给出第二个数。若玩家猜对了,则系统奖励玩家 t 个筹码;否则扣除玩家 t 个筹码。注意:玩家下注的筹码数不能超过自己帐户上拥有的筹码数。当玩家输光了全部筹码后,游戏就结束。输入格式:输入在第一行给出 2 个正整数 T 和 K(≤ 1...原创 2019-07-17 18:07:33 · 140 阅读 · 0 评论 -
PAT (Basic Level) Practice (中文)1036 跟奥巴马一起编程 (15 分)(Java实现)
题目描述:美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!输入格式:输入在一行中给出正方形边长 N(3≤N≤20)N(3≤N≤20)N(3≤N≤20)和组成正方形边的某种字符 CCC,间隔一个空格。输出格式:...原创 2019-07-17 17:21:40 · 198 阅读 · 0 评论