官方题解 | 欢乐赛#49
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 除法 入门 T2 买凤梨 入门 T3 去重 入门 T4 幸运数 入门 T5 菠萝排名 入门 T6 矩阵旋转 普及-
T1 除法
题目大意
给定一个正整数 nnn , 请输出 nnn 除以 222 向上取整的结果。
题解思路
想要求一个数字 xxx 除 222 上取整的结果,即是求 (x+1)/2(x + 1) / 2(x+1)/2 的结果。
参考代码
T2 买凤梨
题目大意
一共有 nnn 种凤梨,每种有美味度 kkk 和价格 ppp。
小明现在有 RRR 元钱,他会选择其中一种凤梨并且把身上的钱都拿去买该品种的凤梨。求这个条件下他能获得的最多的美味度总和。
题解思路
对于一种价格为 ppp 的凤梨, 最多可以买 R/pR / pR/p 个, 因此美味度总和为 R/p∗kR / p * kR/p∗k。
直接遍历每一个凤梨品种,求出其中最大的美味度总和即可。
参考代码
T3 去重
题目大意
给定 nnn 个数字, 对于每个数字,只有第一次出现时候,对其输出一次。
题解思路
循环嵌套
注意到数据范围只有5000,本题可以不借助桶数组和哈希表等工具, 直接使用复杂度为 O(n2)O(n^2)O(n2) 的暴力解通过。
具体思路为 : 对于第 iii 个数字, 遍历前面所有的数字, 如果有出现相同的数字则不用再输出了。 否则说明这是该数字第一次出现,直接输出即可。
参考代码
T4 幸运数
题目大意
对于一个数字 xxx 而言 如果在 [x,x+m][x, x + m][x,x+m] 范围内, 存在一个数字他的数位和是 ttt 的倍数 , 那么我们认为它是一个幸运数。
求在 111 到 nnn 里面幸运数的个数。
题解思路
按照题目要求将数字 iii 从 111 遍历到 nnn , 在 [i,i+m][i, i + m][i,i+m] 中只要出现一个数字的数位和为 ttt 的倍数,则数字 iii 为一个幸运数, 最终计算幸运数的总数。
数位和的计算方式: 使用 whilewhilewhile 循环每次 %10\%10%10获取最低位的数值, 再 /10/10/10 删去最低位。
参考代码
T5 菠萝排名
题目大意
给定 nnn 个菠萝品种, 编号从 111 到 nnn 。对于每一种菠萝都有一个甜度和酸度指标 xxx 和 yyy 。
需要对菠萝进行排名, 排名规则为按照甜度从大到小排名, 甜度一样的品种, 按照酸度从小到大排名,对于甜度和酸度都一样的菠萝,按照编号从小到大排名。
只有甜度大于等于 aaa 并且酸度小于等于 bbb 的菠萝,才有资格参与排名,求最后的排名名单。
题解思路
本题每个菠萝有三个信息: 甜度 酸度 编号。因此直接考虑使用结构体排序来给菠萝进行排名 (按照题目给定的规则:先按照甜度排序, 再按照酸度排序, 再按照编号排序)
由于只有甜度和酸度符合要求的菠萝才能参加排名,因此在按照排名从高到低输出的过程中, 跳过没资格参与排名的菠萝品种即可。
参考代码
T6 矩阵旋转
题目大意
对于给定的一个 n×nn \times nn×n 的二维矩阵, 请输出二维矩阵最外围一圈顺时针旋转 909090 度的结果。
最外围一圈即: 第 111 行或第 nnn 行 或第 111 列或第 nnn 列。
题解思路
可以手动寻找一下 旋转 909090 度之前和之后点的坐标关系: 旋转之后的 a[i][j]a[i][j]a[i][j], 他的原数值存在于原先的 a[n+1−j][i]a[n + 1 - j][i]a[n+1−j][i] 这个位置。
因此可以按照这个规律,对于二维矩阵最外面一圈的数字直接输出旋转前所在位置的数字。 对于不在最外面一圈的数字,直接输出即可。
参考代码