语法阶段 I 的基本应用训练
一、最值问题
最值问题分很多种,基础阶段的最值问题常常指的是在一系列数中,找到最大,或找到最小。或再稍微难一些的找到第二最值,第三最值,第 K 最值等
但都是以找到第一最值为为基础。
找最值的基本思想是:局部贪最值。即每次探查一个新的数据时,都与已记录的最值进行比较,若新数据是新最值,则更新记录值。
如:记录的最大值是 7,准备探查 8,发现 8 > 7,则更新记录的最大值为 8。
题面问题通常会有两种方式
给出数据的范围
例如问题是:有 n 个整数 a1,a2,a3,...,ana_1, a_2, a_3, ..., a_na1 ,a2 ,a3 ,...,an ,每个整数 1≤ai≤100001≤a_i≤100001≤ai ≤10000,输出其中的最大值。
可以设计一个记录最值的 maxx 并给初始值:(因为范围已知)
* 找最大,设最小,最好比最小更小
* 找最小,设最大,最好比最大更大
不给出数据的范围
问题如上,但由于没给出数据范围,因此无法正确使用如上办法给出初始值。
可以考虑先输入第一个整数作为初始最值。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、数位分离问题
该问题主要是来解决需要将一串整数进行拆分成每一位数码的问题。例如 123 拆成个位数 3,十位数 2,百位数 1。
底层思想:带余数的整数除法 a ÷ b = c .... d 。
a/b = c 求商运算
a%b = d 求余运算
核心思想:十进制时,针对 b = 10 的整数拆分。
a/10 删除个位数
a%10 获得个位数
例如 a = 123:a/10 = 12, a%10=3 两种计算分别后的删除个位数后的整数,和其个位数。
如图示:
构建逻辑:当数字还不为 0 时,不断地进行拆分,直到拆成 0 为止。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、循环控制问题
循环控制是指使用 continue 和 break 改变循环执行的过程或结束。
continue:结束本次循环 (结束循环体),继续下次循环
break:退出一层循环 (结束本循环)
建议使用实验性代码来辅助理解。
实验性代码