# PythonCode **Repository Path**: teacher-heng/PythonCode ## Basic Information - **Project Name**: PythonCode - **Description**: 通用基础编程练习题100道 - **Primary Language**: Python - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2023-10-16 - **Last Updated**: 2025-09-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 使用说明 - 本题集适用于Java、Python、C、C++等编程语言 - 本题集适用于初中级编程语言课,供老师课上讲解和学生课下练习 - 本题集题目若如无特殊说明,默认为ACM编码模式 - 本题集结合Java/Python/Go等标准课纲进行讲解 - 本题集提供Python源码,链接:https://gitee.com/teacher-heng/PythonCode **ACM编码模式示例:输入两个整数并输出两者之和** 输入两个整数,数字之间用空格分隔 输出两者之和 > 输入: > > 1 3 > > 输出: > > 4 Java模板 ```java import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextInt()) { // 注意 while 处理多个 case int a = in.nextInt(); int b = in.nextInt(); System.out.println(a + b); } } } ``` Python模板 ```python import sys for line in sys.stdin: a = line.split() print(int(a[0]) + int(a[1])) ``` C模板 ```c #include int main() { int a, b; while (scanf("%d %d", &a, &b) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to printf("%d\n", a + b); } return 0; } ``` C++模板 ```c++ #include using namespace std; int main() { int a, b; while (cin >> a >> b) { // 注意 while 处理多个 case cout << a + b << endl; } } // 64 位输出请用 printf("%lld") ``` # 第1部分 语法基础 > **此部分重点练习:常量与变量、数据类型、运算符、选择语句、常用内置函数/内置模块/工具类/三方库** ## Demo01 摄氏温度转化为华氏温度 **题目描述** 输入一个摄氏温度的值,将它转变为华氏温度,并将结果输出 转换的公式为如下: $$ fahrenheit=(9/5)*celsius+32 $$ **输入输出描述** 输入一个值表示摄氏温度celsius 输出华氏温度fahrenheit ,结果保留一位小数点 **示例** > 输入: > > 43 > > 输出: > > 109.4 ## Demo02 计算圆柱体的体积 **题目描述** 输入圆柱的半径和高,并利用如下公式计算圆柱体的底面积和体积。 $$ area=radius*radius*π $$ $$ volume=area*length $$ **输入输出描述** 分别输入圆柱的半径radius和高度length,两个数据之间用空格分隔 输出两行,第一行为圆柱底面积area,第二行为圆柱体积volume,结果保留两位小数点 **示例** > 输入: > > 5.5 12 > > 输出: > > 95.03 > > 1140.41 ## Demo03 将英尺数转换为米数 **题目描述** 输入英尺数然后将它转换为米数,并输出结果,一英尺等于0.305米 **输入输出描述** 输入一个数据表示英尺数 输出转换后的米数,结果保留四位小数点 **示例** > 输入: > > 16.5 > > 输出: > > 5.0325 ## Demo04 计算小费 **题目描述** 读取小计和酬金率,然后计算小费以及合计金额。例如客户的小计为10元,酬金率为15%,那么小费是1.5元,合计金额为11.5元 **输入输出描述** 分别输入小计和酬金率,两个数据用之间用空格分隔 输出两行,第一行为小费,第二行为合计金额,结果保留两位小数 **示例** > 输入: > > 15.69 15 > > 输出: > > 2.35 > > 18.04 ## Demo05 对一个整数中的各位数字求和 **题目描述** 读取一个0到1000之间的整数,并计算它各位数字之和 **输入输出描述** 输入一个[0,1000]之间的整数 输出该数字的各位数字之和 **示例1** > 输入: > > 999 > > 输出: > > 27 > > 解释: > > 999各位数之和为9 + 9 + 9 = 27 **示例2** > 输入: > > 12 > > 输出: > > 3 ## Demo06 计算年数和天数 **题目描述** 输入分钟数,然后将该分钟数转换为年数和天数,假定一年有365天 **输入输出描述** 输入一个分钟数 输出两行,第一行为年数,第二行为天数 **示例** > 输入: > > 1000000000 > > 输出: > > 1902 > > 214 ## Demo07 计算能量 **题目描述** 水从初始温度加热到最终温度是需要能量的,请计算需要多少能量,公式如下: $$ Q = M * (finalTemperature - initialTemperature) * 4184 $$ 这里的M是按千克计的水量,初始温度和最终温度均为摄氏度,热量Q以焦耳计 **输入输出描述** 输入三行数据,第一行输入水量,第二行输入初始温度,第三行输入最终温度 输出所需的能量值,结果保留一位小数 **示例** > 输入: > > 55.5 > > 3.5 > > 10.5 > > 输出: > > 1625484.0 ## Demo08 分割数字 **题目描述** 输入一个四位整数,并以反向顺序显示 **输入输出描述** 输入一个四位整数 输出四行,第一行为个位,第二行为十位,第三行为百位,第四行为千位 **示例** > 输入: > > 5213 > > 输出: > > 3 > > 1 > > 2 > > 5 ## Demo09 计算三角形的面积 **题目描述** 输入三角形的三个顶点坐标,并计算其面积,计算公式如下 $$ s=(side1+side2+side3)/2 \\ area = \sqrt{s(s-side1)(s-side2)(s-side3)} $$ **输入输出描述** 输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔 输出三角形的面积,结果保留一位小数 **示例** > 输入: > > 1.5 -3.4 4.6 5 9.5 -3.4 > > 输出: > > 33.6 ## Demo10 显示当前时间 **题目描述** 输入你所在的时区,并输出当前的时间 **输入输出描述** 输入时区,如东八区为8,西五区为-5 输出二十四小时制的时间,格式为 时:分:秒 **示例** > 输入: > > 8 > > 输出: > > 21:43:12 ## Demo11 计算三角形的三个角 **题目描述** 输入三角形的三个顶点坐标,并计算该三角形的三个角分别是多少(角度制) $$ A=acos((a*a-b*b-c*c)/(-2*b*c)) \\ B=acos((b*b-a*a-c*c)/(-2*a*c)) \\ C=acos((c*c-b*b-a*a)/(-2*a*b)) \\ $$ 其中a、b、c分别表示三条边,A、B、C分别表示三边对应的角 **输入输出描述** 输入六个数据,分别表示三角形三个顶点的坐标x1、y1、x2、y2、x3和y3,数据之间用空格分隔 输出三行,分别为A、B、C三个角的度数,结果保留两位小数 **示例** > 输入: > > 1 1 6.5 1 6.5 2.5 > > 输出: > > 15.26 > > 90.00 > > 74.74 ## Demo12 最小数量的硬币 **题目描述** 假设硬币种类分为:一元硬币、两角五分硬币、一角硬币、五分硬币、一分硬币 输入总金额,并将总金额兑换成若干个硬币,并保证所兑换的硬币个数最少 **输入输出描述** 输入总金额 输出每种硬币的个数 **示例** > 输入: > > 11.56 > > 输出: > > 11个一元硬币 > > 2个两角五分硬币 > > 0个一角硬币 > > 1个五分硬币 > > 1个一分硬币 ## Demo13 正多边形的面积 **题目描述** 正多边形是边长相等的多边形,而且所有的角相等,计算正多边形的公式为: $$ area = \frac{n*s^2}{4*tan(\frac{π}{n})} $$ **输入输出描述** 输入两个数据分别表示边的个数n和边的长度s,数据之间用空格分隔 输出边长为s的正n多边形的面积,结果保留两位小数 **示例** > 输入: > > 5 6.5 > > 输出: > > 72.69 ## Demo14 计算身体质量指数 **题目描述** BMI是根据体重测量健康的方式,通过以千克为单位的体重除以以米为单位的身高的平方计算而出 BMI指数解读如下: | BMI | 解释 | | :----------------: | :--: | | BMI < 18.5 | 超轻 | | 18.5 ≤ BMI < 25.0 | 标准 | | 25.0 ≤ BMI < 30.0 | 超重 | | 30.0 ≤ BMI | 肥胖 | **输入输出描述** 输入体重和身高,数据之间用空格分隔 输出BMI指数结果 **示例** > 输入: > > 60 1.8 > > 输出: > > 标准 ## Demo15 判定闰年 **题目描述** 一个年份如果能被4整除但不能被100整除,或者能被400整除,那么这个年份就是闰年 **输入输出描述** 输入一个年份 输出Yes表示该年份为闰年,No则表示不是闰年 **示例1** > 输入: > > 2008 > > 输出: > > Yes **示例2** > 输入: > > 2002 > > 输出: > > No ## Demo16 中彩票 **题目描述** 随机产生一个两位数数字,然后用户输入一个两位数数字,并根据以下规则判定用户赢得的奖金是多少 (1)输入的数字和随机产生的数字完全相同(包括顺序),奖金为10000元 (2)输入的数字和随机产生的数字相同(不包括顺序),奖金为3000元 (3)输入的数字和随机产生的数字有一位数相同,奖金为1000美元 (4)输入的数字和随机产生的数字都不相同,没有奖金,0元 **输入输出描述** 输入一个两位数 输出两行,第一行输出那个随机产生的两位数,第二行输出用户的奖金 **示例1** > 输入: > > 12 > > 输出: > > 12 > > 10000 **示例2** > 输入: > > 12 > > 输出: > > 21 > > 3000 **示例3** > 输入: > > 12 > > 输出: > > 23 > > 1000 **示例4** > 输入: > > 12 > > 输出: > > 45 > > 0 ## Demo17 解一元二次方程 **题目描述** 一元二次方程$ax^2+bx+c=0 (a != 0)$ 的解可以使用下面的公式计算 $$ r_1=\frac{-b+\sqrt{b^2-4ac}}{2a},r_2=\frac{-b-\sqrt{b^2-4ac}}{2a} $$ 其中$b^2-4ac$称为判别式,如果它为正,则方程有两个实数解;为零,方程只有一个实数解;为负,没有实数解 **输入输出描述** 输入a、b、c三个数据,数据之间用空格分隔 两个解每行输出一个;一个解单行输出;无解则单行输出无实数解,保留两位小数 **示例1** > 输入: > > 1.0 3 1 > > 输出: > > -0.38 > > -2.62 **示例2** > 输入: > > 1 2.0 1 > > 输出: > > -1.00 **示例3** > 输入: > > 1 2 3 > > 输出: > > 无实数解 ## Demo18 解2×2线程方程 **题目描述** 如有一个2×2的线程方程组: $$ ax+by=e \\ cx+dy=f $$ 你可以使用克莱姆法则解该线性方程: $$ x=\frac{ed-bf}{ad-bc},y=\frac{af-ec}{ad-bc} $$ 其中 $ad-bc$ 为判别式,如果为零则输出无解 **输入输出描述** 输入a、b、c、d、e、f六个数据,数据之间用空格分隔 输出两行,第一行x的解,第二行y的解,保留一位小数 **示例1** > 输入: > > 9.0 4.0 3.0 -5.0 -6.0 -21.0 > > 输出: > > -2.0 > > 3.0 **示例2** > 输入: > > 1.0 2.0 2.0 4.0 4.0 5.0 > > 输出: > > 无解 ## Demo19 未来是周几 **题目描述** 输入表示今天是一周内哪一天的数字(星期天是0,星期一是1,...,星期六是6) 并输入今天之后到未来某天的天数,然后输出该天是星期几 **输入输出描述** 输入两个数据,分别表示今日星期几的数字和未来某天的天数,数据之间用空格分隔 输出未来某天是星期几 **示例1** > 输入: > > 1 3 > > 输出: > > 星期四 **示例2** > 输入: > > 0 31 > > 输出: > > 星期三 ## Demo20 本年中的第几天 **题目描述** 给定某年、某月、某日的一个日期,计算该日是今年中的第几天 **输入输出描述** 输入三个数据分别表示年、月、日,数据之间用空格分隔 输出该日是今年中的第几天 **示例1** > 输入: > > 2023 1 28 > > 输出: > > 28 **示例2** > 输入: > > 2023 3 2 > > 输出: > > 61 ## Demo21 剪刀石头布 I **题目描述** 计算机随机产生一个数字0、1和2分别表示剪刀、石头和布 用户输入数字0、1或2,输出用户赢、计算机赢或平局 **输入输出描述** 输入数字0、1或2 输出有三行,第一行输出计算机出的啥,第二行输出用户出的啥,第三行输出结果 **示例1** > 输入: > > 0 > > 输出: > > 计算机出的 石头 > > 用户出的 剪刀 > > 计算机赢 **示例2** > 输入: > > 1 > > 输出: > > 计算机出的 剪刀 > > 用户出的 石头 > > 用户赢 **示例3** > 输入: > > 2 > > 输出: > > 计算机出的 布 > > 用户出的 布 > > 平局 ## Demo22 三角形的周长 **题目描述** 输入三角形三边的长度,如果输入合法则计算周长并输出结果;否则输出非法 如果任意两边之和大于第三边则输入都是合法的 **输入输出描述** 输入三个数据表示三边,数据之间用空格分隔 输出三角形的周长,如果非法则输出非法 **示例1** > 输入: > > 1 1 1 > > 输出: > > 3 **示例2** > 输入: > > 1 3 1 > > 输出: > > 非法 ## Demo23 一周的星期几 **题目描述** 泽勒的一致性是一个由泽勒开发的算法,用于计算一周的星期几,公式如下: $$ h=(q+\lfloor\frac{26(m+1)}{10}\rfloor+k+\lfloor\frac{k}{4}\rfloor+\lfloor\frac{j}{4}\rfloor+5j) \% 7 $$ (1)$h$是指一周的星期几(0表示星期六、1表示星期天、...、6表示星期五) (2)$q$是一个月的哪一天 (3)$m$是月份(3表示三月、4表示四月、...、12表示十二月),其中一月和二月都是按照前一年的13月和14月来计数的,所以还得把年份改为前一年 (4)$j$是世纪数,即$\lfloor\frac{year}{100}\rfloor$ (5)$k$是一个世纪的某一年,即$year \% 100$ (6)$\lfloor\rfloor$为向下取整符号 **输入输出描述** 输入年、月、日三个数据,数据之间用空格分隔 输出该日是周几 **示例1** > 输入: > > 2013 1 25 > > 输出: > > 星期五 **示例2** > 输入: > > 2012 5 12 > > 输出: > > 星期六 ## Demo24 直线的交点 **题目描述** 直线A上的两个点是$(x1,y1)$和$(x2,y2)$,直线B上的两个点是$(x3,y3)$和$(x4,y4)$ 如果两条直线有交点,可以通过解下面的线性等式找出: $$ (y_1-y_2)x-(x_1-x_2)y=(y_1-y_2)x_1-(x_1-x_2)y_1 \\ (y_3-y_4)x-(x_3-x_4)y=(y_3-y_4)x_3-(x_3-x_4)y_3 $$ 如果没有解,则表示两条直线平行 **输入输出描述** 输入八个数据,分别为x1 y1 x2 y2 x3 y3 x4 y4,数据之间用空格分隔 如有交点则输出交点的坐标x y,否则输出两条直线平行 **示例1** > 输入: > > 2 2 5 -1 4 2 -1 -2 > > 输出: > > 2.89 1.11 **示例2** > 输入: > > 2 2 7 6 4 2 -1 -2 > > 输出: > > 两条直线平行 ## Demo25 回文数 **题目描述** 输入一个三位整数,然后判断其是否为一个回文数 如果一个数从左向右和从右向左读取时是一样的,那么这个数就是回文数 **输入输出描述** 输入一个数字 输出Yes表示是回文数,否则输出No **示例1** > 输入: > > 121 > > 输出: > > Yes **示例2** > 输入: > > 123 > > 输出: > > No ## Demo26 两个矩形 **题目描述** 判断两个矩形之间的关系:包含,重叠,相离 **输入输出描述** 输入两行,每行四个数据,分别是矩形的中心坐标x、y和矩形的宽、高 输出两者的关系 **示例1** > 输入: > > 2.5 4 2.5 43 > > 1.5 5 0.5 3 > > 输出: > > 包含 **示例2** > 输入: > > 1 2 3 5.5 > > 3 4 4.5 5 > > 输出: > > 重叠 **示例3** > 输入: > > 1 2 3 3 > > 40 45 3 2 > > 输出: > > 相离 # 第2部分 循环语句 > **此部分重点练习:for循环语句、while循环语句、函数、字符串** ## Demo27 打印数字 I **题目描述** 利用循环,寻找规律,打印如下数字模式: ``` 模式A 1 1 2 1 2 3 1 2 3 4 1 2 3 4 5 1 2 3 4 5 6 模式B 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 模式C 1 2 1 3 2 1 4 3 2 1 5 4 3 2 1 6 5 4 3 2 1 模式D 1 2 3 4 5 6 1 2 3 4 5 1 2 3 4 1 2 3 1 2 1 ``` ## Demo28 打印数字 II **题目描述** 利用循环,寻找规律,打印如下数字模式: ``` 1 2 1 2 3 2 1 2 3 4 3 2 1 2 3 4 5 4 3 2 1 2 3 4 5 6 5 4 3 2 1 2 3 4 5 6 7 6 5 4 3 2 1 2 3 4 5 6 7 ``` ## Demo29 打印数字 III **题目描述** 利用循环,寻找规律,打印如下数字模式: ``` 1 1 2 1 1 2 4 2 1 1 2 4 8 4 2 1 1 2 4 8 16 8 4 2 1 1 2 4 8 16 32 16 8 4 2 1 1 2 4 8 16 32 64 32 16 8 4 2 1 ``` ## Demo30 打印菱形 I **题目描述** 如下所示,是一个高度为9的菱形 ``` * * * * * * * * * * * * * * * * * * * * * * * * * ``` 用户输入菱形高度n,并打印出该高度下的菱形 **输入输出描述** 输入高度n,n为奇数 输出该高度的菱形 **示例** > 输入: > > 5 > > 输出: > > ``` > * > * * > * * * > * * > * > ``` ## Demo31 打印菱形 II **题目描述** 如下所示,是一个高度为9的菱形 ``` * * * * * * * * * * * * * * * * ``` 用户输入菱形高度n,并打印出该高度下的菱形 **输入输出描述** 输入高度n,n为奇数 输出该高度的菱形 **示例** > 输入: > > 5 > > 输出: > > ``` > * > * * > * * > * * > * > ``` ## Demo32 打印菱形 III **题目描述** 如下所示,是一个高度为9的菱形 ``` * *** ***** ******* ********* ******* ***** *** * ``` 用户输入菱形高度n,并打印出该高度下的菱形 **输入输出描述** 输入高度n,n为奇数 输出该高度的菱形 **示例** > 输入: > > 5 > > 输出: > > ``` > * > *** > ***** > *** > * > ``` ## Demo33 猜数字 **题目描述** 计算机随机生成一个[0,100]之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相同 对于用户输入的数字,程序会提示它是过高还是过低 **输入输出描述** 每次输入一个整数 每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束 **示例** > 输入:50 > > 输出:高了 > > 输入:25 > > 输出:低了 > > 输入:42 > > 输出:高了 > > 输入:39 > > 输出:猜中了!答案就是39 ## Demo34 最大公约数 I **题目描述** 输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8 **输入输出描述** 输入两个数字 输出最大公约数 **示例1** > 输入: > > 16 24 > > 输出: > > 8 **示例2** > 输入: > > 7 3 > > 输出: > > 1 ## Demo35 判断素数 **题目描述** 一个大于1的整数如果只能被正整数1和它本身整除,则它就是素数,例如2、3、5和7都是素数,而4、6、8、9则不是 **输入输出描述** 输入一个大于1的正整数 输出Yes表示该数字是素数,否则输出No **示例1** > 输入: > > 9 > > 输出: > > No **示例2** > 输入: > > 11 > > 输出: > > Yes ## Demo36 最小公倍数 **题目描述** 输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15 **输入输出描述** 输入两个正整数 输出最小公倍数 **示例1** > 输入: > > 3 9 > > 输出: > > 9 **示例2** > 输入: > > 4 6 > > 输出: > > 12 ## Demo37 整数的素因子 **题目描述** 输入一个正整数,然后找出它所有的最小因子,也称之为素因子 **输入输出描述** 输入一个正整数 输出多行,每行输出一个素因子 **示例1** > 输入: > > 120 > > 输出: > > 2 2 2 3 5 > > 解释: > > 2 * 2 * 2 *3 * 5 = 120 **示例2** > 输入: > > 100 > > 输出: > > 2 2 5 5 ## Demo38 完全数 **题目描述** 如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数 例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1 **输入输出描述** 输入一个正整数 输出该数是否为完全数 **示例1** > 输入: > > 6 > > 输出: > > Yes **示例2** > 输入: > > 9 > > 输出: > > No ## Demo39 前50个素数 **题目描述** 打印前50个素数,每打印10个素数换行 ## Demo40 计算π **题目描述** 你可以使用下面的数列近似计算π $$ π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1}) $$ 当i越大时,计算结果越近似于π ## Demo41 计算e **题目描述** 你可以使用下面的数列近似计算e $$ e=1+\frac{1}{1!}+\frac{1}{2!}+\frac{1}{3!}+\frac{1}{4!}+...+\frac{1}{i!} $$ 当i越大时,计算结果越近似于e ## Demo42 剪刀石头布 II **题目描述** 延伸【Demo21剪刀石头布 I】的问题,利用循环将程序改为,计算机和电脑谁先赢三次,谁就是终极胜利者 ## Demo43 组合问题 I **题目描述** 在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数 注:组合(a,b)与组合(b,a)算同一种组合,只记录一次 ## Demo44 组合问题 II **题目描述** 有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少? ## Demo45 水仙花数 **题目描述** 水仙花数,是一个三位数,且这个数的个位、十位和百位的立方和等于该数字本身,例如$153=1^3+5^3+3^3$ 编写程序,输出所有的水仙花数 ## Demo46 青蛙跳台阶 **题目描述** 一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法? 例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2) ## Demo47 堆叠相加 **题目描述** 现有堆叠相加模式$a+aa+aaa+aaaa+aaaaa+......$ 例如:$2+22+222+2222+22222$,其中a为2,且有5组数字 **输入输出描述** 输入两个数据分别为数字a和组数n 输出按照堆叠相加模式算出的和 **示例** > 输入: > > 3 4 > > 输出: > > 3702 > > 解释: > > 3 + 33 + 333 + 3333 = 3702 ## Demo48 十进制转二进制 **题目描述** 输入一个十进制正整数,输出其二进制形式 **输入输出描述** 输入一个十进制正整数 输出二进制字符串 **示例** > 输入: > > 9 > > 输出: > > 1001 ## Demo49 二进制转十进制 **题目描述** 输入一个二进制字符串,输出其对应的十进制数字 **输入输出描述** 输入一个二进制字符串 输出十进制数字 **示例** > 输入: > > 1001 > > 输出: > > 9 ## Demo50 十进制转十六进制 **题目描述** 输入一个十进制正整数,输出其十六进制形式 **输入输出描述** 输入一个十进制正整数 输出十六进制字符串 **示例** > 输入: > > 1233321 > > 输出: > > 1e1b9 ## Demo51 十六进制转十进制 **题目描述** 输入一个十六进制字符串,输出其对应的十进制数字 **输入输出描述** 输入一个十六进制字符串 输出十进制数字 **示例** > 输入: > > 1e1b9 > > 输出: > > 123321 ## Demo52 最长公共前缀 **题目描述** 给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写 **输入输出描述** 输入两行,分别表示s1和s2 输出前缀串 **示例** > 输入: > > abcdefg > > abcdhko > > 输出: > > abcd ## Demo53 子串出现的次数 **题目描述** 给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配 **输入输出描述** 输入两行字符串,分别为s1和s2,s2的长度小于等于s1 输出s2在s1中出现的次数 **示例1** > 输入: > > ABCsdABsadABCasdhjabcsaABCasd > > ABC > > 输出: > > 3 **示例2** > 输入: > > AAAAAAAA > > AAA > > 输出: > > 2 ## Demo54 最长公共子串 **题目描述** 给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写 **输入输出描述** 输入两行字符串,分别为s1和s2 输出最长公共子串 **示例** > 输入: > > 123ABCDEFG83hsad > > iughABCDEFG23uy > > 输出: > > ABCDEFG ## Demo55 检测密码 **题目描述** 一些网站会给密码强加一些规则: (1)密码必须至少有8个字符 (2)密码只能包含英文字母和数字 (3)密码应该至少包含两个数字 (4)密码应该至少包含两个大写字母 如果密码符合规则,输出Yes;否则输出No **输入输出描述** 输入一串密码 输出该密码是否符合规则 **示例1** > 输入: > > 123456ab > > 输出: > > No **示例2** > 输入: > > 123abcABC > > 输出: > > Yes ## Demo56 回文素数 **题目描述** 回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数 输出显示前100个回文素数,每行显示10个 ## Demo57 反素数 **题目描述** 反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数 输出显示前100个反素数,每行显示10个 ## Demo58 双素数 **题目描述** 双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数 输出显示小于1000的双素数 ## Demo59 梅森素数 如果一个素数可以写成$2^p-1$的形式,其中p是某个正整数,那么这个素数就称作梅森素数 输出p≤31的所有梅森素数 ## Demo60 平方根的近似求法 有几种实现开平方$\sqrt{n}$的技术,其中一个称为巴比伦法 它通过使用下面公式的反复计算近似地得到: $$ nextGuess=(lastGuess+n/lasetGuess)/2 $$ 当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值 lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行 编写代码,求解n的平方根的近似值 # 第3部分 数组操作 > **此部分重点练习:一维数组、二维数组** ## Demo61 指定等级 **题目描述** 读入学生成绩,获取最高分best,然后根据下面的规则赋等级值: (1)如果分数≥best-10,等级为A (1)如果分数≥best-20,等级为B (1)如果分数≥best-30,等级为C (1)如果分数≥best-40,等级为D (1)其他情况,等级为F **输入输出描述** 输入两行,第一行输入学生人数n,第二行输入n个学生的成绩 输入n行,表示每个学生的成绩等级 **示例** > 输入: > > 4 > > 40 55 70 58 > > 输出: > > 学生0分数为40,等级为C > > 学生1分数为55,等级为B > > 学生2分数为70,等级为A > > 学生3分数为58,等级为B ## Demo62 计算数字的出现次数 **题目描述** 读取1到100之间的整数,然后计算每个数出现的次数 **输入输出描述** 输入两行,第一行为整数的个数n,第二行为n个整数 输出多行,每行表示某数及其出现的次数,顺序按照数字从小到大 **示例** > 输入: > > 9 > > 2 5 6 5 4 3 23 43 2 > > 输出: > > 2出现2次 > > 3出现1次 > > 4出现1次 > > 5出现2次 > > 6出现1次 > > 23出现1次 > > 43出现1次 ## Demo63 打印不同的数 **题目描述** 读入n个数字,并显示互不相同的数(即一个数出现多次,但仅显示一次),数组包含的都是不同的数 **输入输出描述** 输入两行,第一行为数字的个数n,第二行为n个数字 输出数组,包含的都是不同的数 **示例** > 输入: > > 10 > > 1 2 3 2 1 6 3 4 5 2 > > 输出: > > 1 2 3 6 4 5 ## Demo64 最大公约数 II **题目描述** 输入n个数字,求该n个数字的最大公约数 **输入输出描述** 输入n个数字 输出最大公约数 **示例** > 输入: > > 9 12 18 21 15 > > 输出: > > 3 ## Demo65 打乱数组 **题目描述** 编程程序,对给定的数组 [1, 2, 3, 4, 5, 6, 7, 8, 9] 进行随机打乱,并输出打乱后的结果 ## Demo66 是否有序 **题目描述** 编写程序,对给定的数组进行判断,判断其数组元素是否非单调递减 **输入输出描述** 第一行输入测试数据组数T,接下来有2T行,每第一行表示数组长度n,每第二行有n个元素 输出T行,表示该数组是否有序 **示例** > 输入: > > 3 > > 5 > > 1 2 3 4 5 > > 4 > > 3 1 2 4 > > 5 > > 1 2 2 3 4 > > 输出: > > YES > > NO > > YES ## Demo67 相似词 **题目描述** 输入两个英文单词,判断其是否为相似词,所谓相似词是指两个单词包含相同的字母 **输入输出描述** 输入两行,分别表示两个单词 输出结果,为相似词输出YES,否则输出NO **示例** > 输入: > > listen > > silent > > 输出: > > YES ## Demo68 豆机器 **题目描述** 豆机器,也称为梅花或高尔顿盒子,它是一个统计实验的设备,它是由一个三角形直立板和均匀分布的钉子构成,如下图所示: image-20230925114402767 小球从板子的开口处落下,每次小球碰到钉子,它就是50%的可能掉到左边或者右边,最终小球就堆积在板子底部的槽内 编程程序模拟豆机器,提示用户输入小球的个数以及机器的槽数,打印每个球的路径模拟它的下落,然后打印每个槽子中小球的个数 **输入输出描述** 输入两个数据,分别表示小球个数和槽子的个数 输出每个小球经过的路径,和最终每个槽子里小球的个数(因为牵扯随机数,程序结果不唯一,示例仅用于表明题意) **示例** > 输入: > > 5 8 > > 输出: > > LRLRLRR > > RRLLLRR > > LLRLLRR > > RRLLLLL > > LRLRRLR > > 0 0 1 1 3 0 0 0 ## Demo69 更衣室难题 **题目描述** 一个学校有100个更衣室和100个学生。所有的更衣室在开学第一天都是锁着的。随着学生进入,第一个学生表示为S1,打开每个更衣室;然后第二个学生S2,从第二个更衣室开始,用L2表示,关闭所有其他更衣室;学生S3从第三个更衣室L3开始,改变每三个更衣室(如果打开则关闭,如果关闭则打开);学生S4从更衣室L4开始,改变每四个更衣室;学生S5开始从更衣室L5开始,改变每五个更衣室。依次类推,直到学生S100改变L100。 在所有学生都经过了操作后,哪些更衣室是打开的?编程找出答案。 ## Demo70 合并两个有序数组 **题目描述** 给定两个有序递增的数组A和数组B,将其进行合并成一个新的数组C,且保持有序递增,并输出数组C **输入输出描述** 第一行输入数组A的长度n,第二行输入n个元素,第三行输入数组B的长度m,第四行输入m个元素 输出数组C的n+m个元素 **示例** > 输入: > > 5 > > 1 5 16 61 111 > > 4 > > 2 4 5 6 > > 输出: > > 1 2 4 5 5 6 16 61 111 ## Demo71 数组划分 **题目描述** 给定一个数组A,将第一个元素$A_0$作为枢纽,并把数组划分成三个区间,第一个区间所有元素$A_0$ 例如数组[5,2,9,3,6,8],划分后的结果为[3,2,5,9,6,8],第一个区间[3,2],第二个区间[5],第三个区间[9,6,8] 结果不唯一,只要保证划分后三个区间的元素特性即可,[2,3,5,9,8,6]、[3,2,5,6,8,9]都可作为上述划分的结果 **输入输出描述** 第一行输入数组的长度n,第二行输入n个元素 输出划分后的结果 **示例** > 输入: > > 10 > > 5 1 9 2 5 7 4 5 3 6 > > 输出: > > 1 2 4 3 5 5 5 9 7 6 ## Demo72 猜单词游戏 **题目描述** 随机产生一个单词,然后提示用户一次猜一个字母,如下示例所示。单词中的每个字母都显示为一个#号,当用户猜测正确时就会显示确切的字母,当用户完成一个单词时,显示失误的次数并询问用户是否继续玩游戏 创建一个数组存储备选单词,然后随机从中抽取进行游戏 **示例** > Enter a letter in word ####### > p > > Enter a letter in word p###### > r > > Enter a letter in word pr##r## > p > > p is already in the word > > Enter a letter in word pr##r## > o > > Enter a letter in word pro#r## > g > > Enter a letter in word progr## > n > > n is not in the word > > Enter a letter in word progr## > m > > Enter a letter in word progr#m > a > > The word is program. You missd 1 time. > > Do you want to guess another word? Enter y or n > ## Demo73 矩阵相乘 **题目描述** 为了实现矩阵A乘以矩阵B,矩阵A的列数必须等于矩阵B的行数 假设矩阵C是相乘的结果,矩阵A的列数为n,那么每个元素 $C_{ij}=A_{i1}*B_{1j}+A_{i2}*B_{2j}+...+A_{in}*B_{nj}$ 例如,对于两个3×3的矩阵A和B: ![image-20240104170844892](https://zh-1258460726.cos.ap-nanjing.myqcloud.com/image-20240104170844892.png) 其中$C_{ij}=A_{i1}*B_{1j}+A_{i2}*B_{2j}+A_{i3}*B_{3j}$ **输入输出描述** 输入矩阵A的行列rowA和colA,接下来输入rowA行,每行colA个元素 输入矩阵B的行列rowB和colB,接下来输入rowB行,每行colB个元素 输出rowA行colB列的矩阵,为相乘的结果 **示例** > 输入: > > 3 3 > > 1 2 3 > > 4 5 6 > > 7 8 9 > > 3 3 > > 0 2.0 4.0 > > 1 4.5 2.2 > > 1.1 4.3 5.2 > > 输出: > > 5.3 23.9 24 > > 11.6 56.3 58.2 > > 17.9 88.7 92.4 ## Demo74 四个连续的相同数字 **题目描述** 给定一个二维数组,判断其中是否有四个连续的相同数字,不管这四个数字是在水平方向、垂直方向还是斜线方向 **输入输出描述** 输入矩阵的行列n和m 输出YES表示存在,NO不存在 **示例** > 输入: > > 5 5 > > 5 6 2 1 6 > > 6 5 6 6 1 > > 1 3 6 1 4 > > 3 6 3 3 4 > > 0 6 2 3 2 > > 输出: > > YES ## Demo75 按列排序 **题目描述** 输入一个矩阵,然后把每列进行升序排序,并输出结果 **输入输出描述** 输入矩阵的行列n和m,接下来输入n行,每行m个元素 输出按列排序后的矩阵 **示例** > 输入: > > 4 4 > > 4 5 8 2 > > 5 1 7 3 > > 9 4 2 1 > > 8 3 6 6 > > 输出: > > 4 1 2 1 > > 5 3 6 2 > > 8 4 7 3 > > 9 5 8 6 ## Demo76 最大块 **题目描述** 给定一个元素为0或者1的矩阵,找到元素都为1且最大的子矩阵 **输入输出描述** 输入矩阵的行列n和m,接下来输入n行,每行m个元素 输出最大块的面积 **示例** > 输入: > > 5 5 > > 1 0 1 0 1 > > 1 1 1 0 1 > > 1 1 1 1 1 > > 0 1 1 1 1 > > 1 1 1 1 1 > > 输出: > > 12 > > 解释: > > 最大子矩阵为 > > 1 1 1 1 > > 1 1 1 1 > > 1 1 1 1 > > 面积为12 ## Demo77 两数之和 **题目描述** 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 **输入输出描述** 输入两个整数,分别是数组长度n和目标值target 接下来输入n个整数 输出角标 **示例1** > 输入: > > 4 9 > > 2 7 11 15 > > 输出: > > 0 1 **示例2** > 输入: > > 3 6 > > 3 2 4 > > 输出: > > 1 2 ## Demo78 按奇偶排序数组 **题目描述** 给你一个整数数组 nums,将 nums 中的的所有偶数元素移动到数组的前面,后跟所有奇数元素。 返回满足此条件的 任一数组 作为答案。 **输入输出描述** 输入数组长度n,接下来输入n个整数 输出排序后的数组 **示例** > 输入: > > 4 > > 3 1 2 4 > > 输出: > > 2 4 3 1 > > 解释: > > [4,2,3,1]、[2,4,1,3] 和 [4,2,1,3] 也会被视作正确答案 ## Demo79 最大子数组和 **题目描述** 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 **输入输出描述** 输入数组长度n,接下来输入n个元素 输出最大子数组和 **示例** > 输入: > > 9 > > -2 1 -3 4 -1 2 1 -5 4 > > 输出: > > 6 ## Demo80 螺旋矩阵 **题目描述** 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 **输入输出描述** 输入矩阵的行列row和col,接下来有row行输入,每行col个数字 输出遍历后的结果 **示例** > 输入: > > 3 4 > > 1 2 3 4 > > 5 6 7 8 > > 9 10 11 12 > > 输出: > > 1 2 3 4 8 12 11 10 9 5 6 7 ## Demo81 探索二维矩阵 I **题目描述** 给你一个满足下述两条属性的 m x n 整数矩阵: - 每行中的整数从左到右按非递减顺序排列。 - 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 **输入输出描述** 输入矩阵的行row和列col,和目标值target 接下来输入row行,每行col个元素 输出是否存在 **示例** > 输入: > > 3 4 3 > > 1 3 5 7 > > 10 11 16 20 > > 23 30 34 60 > > 输出: > > true ## Demo82 探索二维矩阵 II **题目描述** 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: - 每行的元素从左到右升序排列 - 每列的元素从上到下升序排列 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。 **输入输出描述** 输入矩阵的行row和列col,和目标值target 接下来输入row行,每行col个元素 输出是否存在 **示例** > 输入: > > 5 5 5 > > 1 4 7 11 15 > > 2 5 8 12 19 > > 3 6 9 16 22 > > 10 13 14 17 24 > > 18 21 23 26 30 > > 输出: > > true ## Demo83 将数组分成和相等的三个部分 **题目描述** 给你一个整数数组 arr,只有可以将其划分为三个和相等的 非空 部分时才返回 true,否则返回 false。 形式上,如果可以找出索引 i + 1 < j 且满足 (arr[0] + arr[1] + ... + arr[i] == arr[i + 1] + arr[i + 2] + ... + arr[j - 1] == arr[j] + arr[j + 1] + ... + arr[arr.length - 1]) 就可以将数组三等分。 **输入输出描述** 输入数组长度n,和n个元素 输出结果 **示例** > 输入: > > 11 > > 0 2 1 -6 6 -7 9 1 2 0 1 > > 输出: > > true > > 解释: > > 0 + 2 + 1 = -6 + 6 - 7 + 9 + 1 = 2 + 0 + 1 ## Demo84 最长连续递增序列 **题目描述** 给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。 连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。 **输入输出描述** 输入数组长度n,和n个元素 输出最长连续递增序列的长度 **示例** > 输入: > > 5 > > 1 3 5 4 7 > > 输出: > > 3 > > 解释: > > 最长连续递增序列是 [1,3,5], 长度为3。 > > 尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。 ## Demo85 长度最小的子数组 **题目描述** 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。 **输入输出描述** 输入数组长度n和目标值target,接下来输入n个元素 输出最小子数组长度 **示例** > 输入: > > 6 7 > > 2 3 1 2 4 3 > > 输出: > > 2 > > 解释: > > 子数组 [4,3] 是该条件下的长度最小的子数组 ## Demo86 寻找两个正序数组中的中位数 **题目描述** 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (m+n)) 。 **输入输出描述** 输入m和n,然后分别输入m个元素和n个元素 输出中位数 **示例1** > 输入: > > 2 1 > > 1 3 > > 2 > > 输出: > > 2.0 > > 解释: > > 合并数组 = [1,2,3] ,中位数2 **示例2** > 输入: > > 2 2 > > 1 2 > > 3 4 > > 输出: > > 2.5 ## Demo87 盛最多水的容器 **题目描述** 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 **输入输出描述** 输入数组长度n,接下来输入n个元素 输出最大水量 **示例1** > 输入: > > 9 > > 1 8 6 2 5 4 8 3 7 > > 输出: > > 49 > > 解释: > > image-20230927170546416 > > 图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49 # 第4部分 高级容器 > **此部分重点练习:栈、队列、线性表、哈希表、集合、优先队列、字符串** ## Demo88 滑动窗口最大值 **题目描述** 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 **输入输出描述** 输入数组长度n和k,接下来输入n个元素 输出每个区间的最大值 **示例** > 输入: > > 8 3 > > 1 3 -1 -3 5 3 6 7 > > 输出: > > 3 3 5 5 6 7 > > 解释: > > 滑动窗口的位置 最大值 > > [1 3 -1] -3 5 3 6 7 3 > 1 [3 -1 -3] 5 3 6 7 3 > 1 3 [-1 -3 5] 3 6 7 5 > 1 3 -1 [-3 5 3] 6 7 5 > 1 3 -1 -3 [5 3 6] 7 6 > 1 3 -1 -3 5 [3 6 7] 7 ## Demo89 有效括号 **题目描述** 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: - 左括号必须用相同类型的右括号闭合。 - 左括号必须以正确的顺序闭合。 - 每个右括号都有一个对应的相同类型的左括号。 **输入描述** 输入一个只包含上述括号的字符串 输出其是否匹配 **示例1** > 输入: > > ()[]{} > > 输出: > > true **示例2** > 输入: > > ({[]{}[)] > > 输出: > > false ## Demo90 逆波兰表达式求值 **题目描述** 给你一个字符串 ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计算该表达式。返回一个表示表达式值的整数。 注意: - 有效的算符为 '+'、'-'、'*' 和 '/' 。 - 每个操作数(运算对象)都可以是一个整数或者另一个表达式。 - 两个整数之间的除法总是 向零截断 。 - 表达式中不含除零运算。 - 输入是一个根据逆波兰表示法表示的算术表达式。 - 答案及所有中间计算结果可以用 32 位 整数表示。 **输入输出描述** 输入一个由数字和操作符组成的表达式 输出表达式的计算结果 **示例1** > 输入: > > 2 1 + 3 * > > 输出: > > 9 > > 解释: > > 该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9 **示例2** > 输入: > > 4 13 5 / + > > 输出: > > 6 > > 解释: > > 该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6 **示例3** > 输入: > > 10 6 9 3 + - 11 * / * 17 + 5 + > > 输出: > > 22 > > 解释: > > 该算式转化为常见的中缀算术表达式为 ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = 22 ## Demo91 无重复字符的最长子串 **题目描述** 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 **输入输出描述** 输入一个字符串s 输出最长子串的长度 **示例1** > 输入: > > abcabcbb > > 输出: > > 3 > > 解释: > > 因为无重复字符的最长子串是 "abc",所以其长度为 3 **示例2** > 输入: > > bbbbb > > 输出: > > 1 > > 解释: > > 因为无重复字符的最长子串是 "b",所以其长度为 1 ## Demo92 两个数组的交集 I **题目描述** 给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 **输入输出描述** 输入nums1的长度n和n个元素,输入nums2的长度m和每个元素 输出所有交集元素 **示例1** > 输入: > > 4 > > 1 2 2 1 > > 2 > > 2 2 > > 输出: > > 2 **示例2** > 输入: > > 3 > > 4 9 5 > > 5 > > 9 4 9 8 4 > > 输出: > > 4 9 > > 解释: > > [9, 4] 也是可通过的 ## Demo93 两个数组的交集 II **题目描述** 给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 **输入输出描述** 输入nums1的长度n和n个元素,输入nums2的长度m和每个元素 输出交集元素 **示例1** > 输入: > > 4 > > 1 2 2 1 > > 2 > > 2 2 > > 输出: > > 2 2 **示例2** > 输入: > > 3 > > 4 9 5 > > 5 > > 9 4 9 8 4 > > 输出: > > 4 9 ## Demo94 和为K的子数组 **题目描述** 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 子数组是数组中元素的连续非空序列。 **输入输出描述** 输入数组长度n和k,接下来输入n个元素 输出个数 **示例1** > 输入: > > 3 2 > > 1 1 1 > > 输出: > > 2 **示例2** > 输入: > > 3 3 > > 1 2 3 > > 输出: > > 2 ## Demo95 唯一摩尔斯密码词 **题目描述** 国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: - 'a' 对应 `".-"` - 'b' 对应 `"-..."` - 'c' 对应 `"-.-."`以此类推 为了方便,所有26个英文字母的摩尔斯密码表如下: ``` [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] ``` 给你一个字符串数组 words ,每个单词可以写成每个字母对应摩尔斯密码的组合。 例如,"cab" 可以写成 `"-.-..--..."` ,(即 `"-.-."` + `".-"` + `"-..."` 字符串的结合)。我们将这样一个连接过程称作 单词翻译 对 words 中所有单词进行单词翻译,返回不同 单词翻译 的数量 **输入输出描述** 输入一组单词 输出不一样的翻译数量 **示例** > 输入: > > gin zen gig msg > > 输出: > > 2 > > 解释: > > 各单词翻译如下: > "gin" -> "--...-." > "zen" -> "--...-." > "gig" -> "--...--." > "msg" -> "--...--." > > 共有 2 种不同翻译, "--...-." 和 "--...--.". ## Demo96 前K个高频元素 **题目描述** 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 **输入输出描述** 输入数组长度n和k,接下来输入n个元素 输出前k个高频元素 **示例** > 输入: > > 6 2 > > 1 1 1 2 2 3 > > 输出: > > 1 2 ## Demo97 根据字符出现频率排序 **题目描述** 给定一个字符串 s ,根据字符出现的 频率 对其进行 降序排序 。一个字符出现的 频率 是它出现在字符串中的次数。 返回 已排序的字符串 。如果有多个答案,返回其中任何一个。 **输入输出描述** 输入一个字符串 输出排序后的字符串 **示例1** > 输入: > > tree > > 输出: > > eert > > 解释: > > 'e'出现两次,'r'和't'都只出现一次。 > 因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。 **示例2** > 输入: > > cccaaa > > 输出: > > cccaaa > > 解释: > > 'c'和'a'都出现三次。此外,"aaaccc"也是有效的答案。 > 注意"cacaca"是不正确的,因为相同的字母必须放在一起。 ## Demo98 Z字形变换 **题目描述** 将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下: ``` P A H N A P L S I I G Y I R ``` 之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。 **输入输出描述** 输入s和numRows 输出变换后的顺序 **示例1** > 输入: > > PAYPALISHIRING 3 > > 输出: > > PAHNAPLSIIGYIR **示例2** > 输入: > > PAYPALISHIRING 4 > > 输出: > > PINALSIGYAHRPI ## Demo99 杨辉三角 **题目描述** 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 **输入输出描述** 输入行数numRows 输出对应杨慧三角 **示例1** > 输入: > > 5 > > 输出: > > ``` > 1 > 1 1 > 1 2 1 > 1 3 3 1 > 1 4 6 4 1 > ``` ## Demo100 超级丑数 **题目描述** 超级丑数 是一个正整数,并满足其所有质因数都出现在质数数组 primes 中。 给你一个整数 n 和一个整数数组 primes ,返回第 n 个 超级丑数 。 题目数据保证第 n 个 超级丑数 在 32-bit 带符号整数范围内。 **输入输出描述** 输入数组长度n和primes 输出超级丑数 **示例1** > 输入: > > 12 > > 2 7 13 19 > > 输出: > > 32 > > 解释: > > 给定长度为 4 的质数数组 primes = [2,7,13,19],前 12 个超级丑数序列为:[1,2,4,7,8,13,14,16,19,26,28,32] **示例2** > 输入: > > 1 > > 2 3 5 > > 输出: > > 1 > > 解释: > > 1 不含质因数,因此它的所有质因数都在质数数组 primes = [2,3,5] 中 # 更多练习途径 (1)[牛客-华为机试篇](https://www.nowcoder.com/exam/oj/ta?tpId=37) (2)[牛客-剑指offer篇](https://www.nowcoder.com/exam/oj/ta?tpId=13) (3)[牛客-名企真题篇](https://www.nowcoder.com/exam/oj?page=1&tab=%E5%90%8D%E4%BC%81%E7%9C%9F%E9%A2%98&topicId=182) (4)[牛客-算法分类篇](https://www.nowcoder.com/exam/oj?page=1&tab=%E7%AE%97%E6%B3%95%E7%AF%87&topicId=295) (5)[力扣-更多更全面](https://leetcode.cn/)