把会做的做了一遍,不会做的就不放题目了
试题A – 门牌制作
问题描述:
小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、0、1、7,即需要 1 个
字符 0,2 个字符 1,1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?
输出: 624
思路:模除筛选,把符合条件的数位用计数器存起来即可。
1 | public class Solution { |
试题C – 蛇形填数
题目描述:
小明用从 1 开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 7 15 …
3 5 8 14 …
4 9 13 …
10 12 …
11 … …
容易看出矩阵第二行第二列中的数是 5。请你计算矩阵中第 20 行第 20 列 的数是多少?
输出:761
思路:
嘤嘤嘤这道题看着数字不是很大暴力就出来了,看大佬的思路直接找规律了。
第n行第n列 = n^2 + (n-1)^2 (tqlllllllllllllll
试题E – 排序
题目描述:
小蓝最近学习了一些排序算法,其中冒泡排序让他印象深刻。
在冒泡排序中,每次只能交换相邻的两个元素。
小蓝发现,如果对一个字符串中的字符排序,只允许交换相邻的两个字符,
则在所有可能的排序方案中,冒泡排序的总交换次数是最少的。
例如,对于字符串 lan 排序,只需要 1 次交换。对于字符串 qiao 排序,
总共需要 4 次交换。
小蓝找到了很多字符串试图排序,他恰巧碰到一个字符串,需要 100 次交
换,可是他忘了吧这个字符串记下来,现在找不到了。
请帮助小蓝找一个只包含小写英文字母且没有字母重复出现的字符串,对
该串的字符排序,正好需要 100 次交换。如果可能找到多个,请告诉小蓝最短
的那个。如果最短的仍然有多个,请告诉小蓝字典序最小的那个。请注意字符
串中可以包含相同的字符。
思路:
主要考的是冒泡排序的特点,最大排序次数应该是n*(n-1)/2次,题目要求求得移动次数最大为100,则n只能等于15,那代入公式就是需要排序105次,按照字典序的定义拿出前十五位字母abcdefghijklklmno; 如果把它反转的话,那么就是onmlkjighfedecba,冒泡排序一定需要排序105次,根据题目要求需要的是100次,那么我们只需要将第六位提到最前面就能省去五次排序,即符合题目要求100次交换。
输出:jonmlkihgfedcba
试题F – 成绩分析
题目描述:
小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是 一个 0 到 100 的整数。 请计算这次考试的最高分、最低分和平均分。
样例输入:
1 | 7 |
样例输出:
1 | 99 |
思路:经典数学问题正常写就好了
1 | import java.util.Scanner; |
试题G – 单词分析
题目描述:
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组
成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不
住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得
最多来分辨单词。
现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这
个字母出现的次数
PS :
输入一行包含一个单词,单词只由小写英文字母组成。
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪 个。如果有多个字母出现的次数相等,输出字典序最小的那个。 第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
样例输入:lanqiao
样例输出:
1 | a |
思路:分割字符串存入HashMap中,记录次数,遍历后输出最大次数的键值对。
1 | import java.util.HashMap; |
试题I – 子串分值和
题目描述:
对于一个字符串 S,我们定义 S 的分值 f(S ) 为 S 中出现的不同的字符个
数。例如 f(”aba”) = 2,f(”abc”) = 3, f(”aaa”) = 1。
现在给定一个字符串 S [0..n 1](长度为 n),请你计算对于所有 S 的非空
子串 S [i.. j](0 ≤ i ≤ j < n),f(S [i.. j]) 的和是多少。
样例输入:ababc
样例输出:28
思路:将字符串分割成全部子串存入List里,然后子串分割字符存入set去重,算出最后的分值和。
1 | import java.util.*; |
The End
好多题8会鸭~~~~~~ 特别是最后一道题装饰珠直接送走我QAQ