得物笔试 得物笔试题 0828
笔试时间:2024年08月28日 秋招
历史笔试传送门:2023秋招笔试合集
第一题
题目:
已知小红每次可以把一个数字向下拨动,即9变成8,8变成7...1变成0,0变成9。她想知道从第一个状态变成第二个状态需要最少拨动多少次?
输入描述
两个长度为4的、仅由数字字符组成的字符串,用空格隔开。
输出描述
最小的拨动次数。
样例输入
9999 8888
样例输出
4
参考题解
代码读取两个4位数的字符串,start和target,表示锁的初始状态和目标状态。对于每个数字位置,计算两个字符串对应数字之间的差值。
所需的最小旋转是通过考虑直接移动(例如,9到8是1个移动)和环绕移动(例如,0到9是1个移动)来确定的。的数学。最小函数用于在直接和绕行选项之间找到较小的移动次数。总步数被累积并打印为结果。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <string> int main() { std::string start, target; std::cin >> start >> target; int moves = 0; for (int i = 0; i < 4; i++) { int startDigit = start[i] - '0'; int targetDigit = target[i] - '0'; int diff; if (startDigit >= targetDigit) { diff = startDigit - targetDigit; } else { diff = startDigit + 10 - targetDigit; } moves += diff; } std::cout << moves << std::endl; return 0; }
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner; public class LockRotation { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String start = scanner.next(); String target = scanner.next(); scanner.close(); int moves = 0; for (int i = 0; i < 4; i++) { int startDigit = start.charAt(i) - '0'; int targetDigit = target.charAt(i) - '0'; int diff; if (startDigit >= targetDigit) { diff = startDigit - targetDigit; } else { diff = startDigit + 10 - targetDigit; } moves += diff; } System.out.println(moves); } }
Python:[此代码未进行大量数据的测试,仅供参考]
start = input().strip() target = input().strip() moves = 0 for i in range(4): start_digit = int(start[i]) target_digit = int(target[i]) if start_digit >= target_digit: diff = start_digit - target_digit else: diff = start_digit + 10 - target_digit moves += diff print(moves)
第二题
题目
小红和小紫正在玩一个游戏,每一关都有一个分数。如果某人某一关分数比上一关高,但另一个人这一关分数比上一关低,那么他就可以嘲笑对方。如果两个人这一关游戏的分数都比上一关多,则增量更多的可以嘲笑对方;如果两个人这一关游戏的分数都比上一关少,则减量更少的可以嘲笑对方。只有当他们的增量相同或者减量相同时,才不会互相嘲笑。例如,假设小红第一关的分数为5,第二关的分数为10;小紫第一关的分数为2,第二关的分数为8,显然小红增加的比小紫多,那么小红就可以嘲笑小紫。现在给定了小红和小紫每一关的分数,你可以选择一段连续的关卡,使得这一段关卡中两个人都不会互相嘲笑,问最多可以选择多少个关卡。特别的,一段连续关卡中的第一关两人不会互相嘲笑。
输入描述
第一行输入一个正整数n,代表关卡数;
第二行输入n个整数ai,代表小红每一关的分数;
第三行输入n个整数bi;,代表小紫每一关的分数。
2 ≤ n ≤ 10^5,-10^9 ≤ ai,bi ≤ 10^9
输出描述
输出可以选择最多的关卡数。
样例输入
5
1 2 3 1 3
-1 0 3 -1 1
样例输出
2
参考题解
滑动窗口+双指针。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream> #include <vector> #include <algorithm> int main() { int n; std::cin >> n; std::vector<int> a(n), b(n); for (int i = 0; i < n; ++i) { std::cin >> a[i]; } for (int i = 0; i < n; ++i) { std::cin >> b[i]; } in
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。