B站在牛客网(https://www.nowcoder.com/test/16519291/summary)上发了一套自己秋招的编程题,恰好今年被老师忽悠着去再参加一次蓝桥杯(我参加C++组,所以下面的题都是用C++做的,没用我熟悉的python),虽然那个比赛很水,但是还是要提高我的编程能力才是。于是准备做点题练习下,B站这个题挺好,题目很新颖(仅限题目描述),不过内容和那个比赛一样水,所以给大家解析下。
1.扭蛋机时间限制:1秒
空间限制:32768K
22娘和33娘接到了小电视君的扭蛋任务:
一共有两台扭蛋机,编号分别为扭蛋机2号和扭蛋机3号,22娘使用扭蛋机2号,33娘使用扭蛋机3号。
扭蛋机都不需要投币,但有一项特殊能力:
扭蛋机2号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+1个
扭蛋机3号:如果塞x(x范围为>=0正整数)个扭蛋进去,然后就可以扭到2x+2个
22娘和33娘手中没有扭蛋,需要你帮她们设计一个方案,两人“轮流扭”(谁先开始不限,扭到的蛋可以交给对方使用),用“最少”的次数,使她们能够最后恰好扭到N个交给小电视君。
输入描述:输入一个正整数,表示小电视君需要的N个扭蛋。
输出描述:输出一个字符串,每个字符表示扭蛋机,字符只能包含”2”和”3”。
输入例子1:10
输出例子1:233
思路有两种,一种是BFS,一种是通过二叉树(其实你看到2x+1和2x+2就差不多知道了),因为这个题是这样的:
可以看到,n是奇数都是最后22扭的,n是偶数都是最后33扭的,那么我们就可以倒着找出最终的顺序。找到下一层之后返回上一层,如果是奇数就是(n-1)/2,偶数就是(n-2)/2,具体可自行验证。给出C++的示例代码:
2.脸滚键盘时间限制:1秒
空间限制:32768K
av394281 中,充满威严的蕾米莉亚大小姐因为触犯某条禁忌,被隙间妖怪八云紫(紫m……èi)按住头在键盘上滚动。
同样在弹幕里乱刷梗被紫姐姐做成罪袋的你被指派找到大小姐脸滚键盘打出的一行字中的第 k 个仅出现一次的字。
(为简化问题,大小姐没有滚出 ascii 字符集以外的字)
输入描述:每个输入都有若干行,每行的第一个数字为k,表示求第k个仅出现一次的字。然后间隔一个半角空格,之后直到行尾的所有字符表示大小姐滚出的字符串S。
输出描述:输出的每一行对应输入的每一行的答案,如果无解,输出字符串Myon~
(请不要输出多余的空行)
为了方便评测,如果答案存在且为c,请输出[c]
输入例子1:2 misakamikotodaisuki
3 !bakabaka~ bakabaka~ 1~2~9!
3 3.1415926535897932384626433832795028841971693993751o582097494459211451488946419191919l91919hmmhmmahhhhhhhhhh
7 www.bilibili.com/av170001
1 111
输出例子1:[d]
[9]
[l]
[7]
Myon~
这个题有几种思路,最简单的还是使用映射(map),让出现的每个字符对应到0上。扫描整个字符串,如果碰到一个字符,就让他对应的数+1,同时记录每个字符出现的顺序。然后扫描记录的顺序,找到第k个对应数是1的字符。但是我们看到题目说的是不超过ASCII,所以直接用ASCII来映射就好了,给出示例C++代码:
3.简单表达式计算时间限制:1秒
空间限制:32768K
给定一个合法的表达式字符串,其中只包含非负整数、加法、减法以及乘法符号(不会有括号),例如7+3*4*5+2+4-3-1,请写程序计算该表达式的结果并输出;
输入描述:输入有多行,每行是一个表达式,输入以END作为结束
输出