官方题解 | 欢乐赛#65题解
赛纲介绍
本次题目的总体题目难度如下,各位选手可以借此评估一下自身的技术水平
题目编号 题目名称 题目难度 T1 皓仔寄快递 入门 T2 皓仔的账单 入门 T3 皓仔的波浪字符串 入门 T4 皓仔画图 入门 T5 皓仔的数字打分 普及- T6 皓仔的成绩排序 普及-
T1 皓仔寄快递
题目大意
寄快递的基本运费是 555 块钱, 在此基础上还需要根据快件的重量来额外计算运费。每千克的重量需要额外支付 yyy 元的运费,现在经过称重,皓仔的快递重量为 xxx 千克,请你帮他计算他的运费是多少?
题解思路
根据题意,可知额外运费为 x×yx \times yx×y, 基础运费为 555 元,注意本题数据范围较大,需要开 long long。
T2 皓仔的账单
题目大意
皓仔在超市买了三类商品:单价分别为 a,b,ca,b,ca,b,c,数量分别为 x,y,zx,y,zx,y,z。收银台有两种规则依次生效:
1. 先满减:当总价 ≥m\ge m≥m 时立减 ddd 元(否则不减)。
2. 后打折:对第一步之后的价格再打 p%p\%p% 的折(例如 p=20p=20p=20 表示打 888 折, 哪怕第一步没有触发满减也可以打折)。
题解思路
本题首先需要计算优惠前的总价格 sum=a*x+b*y+c*z , 在此基础上按照题目给出的要求分两步走:
首先是先判断是否可以满减,当 sum >= m 时候,令 m -= d。
而后进行打折操作,打 p%p\%p% 的折也就是让价格乘以(100-p)/100。
最终使用printf输出答案即可。
参考代码
T3 皓仔的波浪字符串
题目大意
当整个字符串的第奇数个字符都为小写,第偶数个字符都为大写,那么这就是一个波浪字符串。
现在皓仔得到了一个只由字母构成的字符串 sss, 你可以自由对其中的字符进行大小写的转换,请你将其修改成一个波浪字符串并且输出。
例如abcDEF转化为波浪字符串则是aBcDeF。
题解思路
使用string输入字符串之后,直接遍历整个字符串,根据下标进行判断:第奇数个字符需要为小写,第偶数个字符需要为大写。
因此当前字符是第奇数个字符,也就是下标为偶数(因为下标是从 000 开始的),且是大写字母的情况下,可以令ASCII码加上32,实现大写转小写。
因此当前字符是第偶数个字符,也就是下标为奇数(因为下标是从 000 开始的),且是小写字母的情况下,可以令ASCII码减去32,实现小写转大写。
参考代码
T4 皓仔画图
题目大意
给定整数 nnn,输出一个 n×nn\times nn×n 的字符图案:
* 边框全部为 #
* 主对角线与副对角线为 *
* 其余位置为 .
字符优先级:若同一位置既在边框又在对角线上,则输出 *(对角线覆盖边框)。
题解思路
本题需要输出一个二维图形,其中需要着重注意边框和对角线:
首先判定是否在对角线上,也就是判断i==j||i+j==n+1,是的话输出 *;
然后判断是否在边框上,也就是判断i==1||i==n||j==1||j==n,是的话输出 #;
剩余情况输出 .
参考代码
T5 皓仔的数字打分
题目大意
给一个 RRR 进制的数字进行打分,打分规则是这样的:
对于其中的每一个数位,如果是一个阿拉伯数字,则总分 +1+1+1,
如果该数位是一个字母,则总分加上对应的 ASCIIASCIIASCII 码值。
现在给皓仔提供 nnn 个 101010 进制的数字,请你帮他计算每一个数字转化成 RRR 进制之后的打分结果。
题解思路
对于每一个数字的打分,首先先将数字转化为 RRR 进制,本题中由于不需要输出具体的 RRR 进制数,因此可以不用开数组存对应的结果。
在对当前数字 xxx 做进制转化的时候,对于每一次除以 RRR 得到的余数 ccc,直接判断是数字还是字母。
当 c≤9c \le 9c≤9 时,则该位是数字,答案 +1。
否则该位是一个字母,答案需要加上对应的 ASCIIASCIIASCII码值,也就是 c+55c + 55c+55。
参考代码
T6 皓仔的美丽子矩阵
题目大意
一场考试结束,每个学生有姓名, 年龄,平均分,学号四个信息。
请按如下优先级进行成绩单的排序:
1. 按照平均分 降序 排序
2. 按照年龄 升序 排序
3. 按照姓名 字典序升序 排序
4. 若三项关键字都相同,则按照学号进行升序排序。
题解思路
本题是一个结构体排序的模板题,由于题目中需要进行排序的学生有多个信息,因此需要使用结构体进行存储。
根据题目要求手写比较函数,函数内部的优先级按照题目要求:
先比较平均分,再比较年龄,再比较姓名,最后比较学号,其中第 iii 个输入的同学学号就是数字 iii。
结构体排序成功之后直接遍历整个数组输出即可、