吉比特笔试 吉比特笔试题 0516
笔试时间:2024年05月16日
历史笔试传送门:2023秋招笔试合集
第一题
题目:比大小
小吉和小雷发现了两个数,但是两个数字是不同进制的,他们想知道谁的数字更大,你可以帮帮他们吗。
输入描述
第一行分别输入两个数字的长度和进制 len1,k1,len2,k2。(0 < len1,len2 <=9;2 <= k1,k2 <= 9)
之后两行按顺序输入两个数字 n,m。(0 < n,m <= 2147483647)
括号里的范围均为十进制的数字范围。
输出描述
如果第一个数小输出 "<",如果第一个数大输出 ">",如果两数相等输出 "="。(输出不包含引号)。
样例输入
3 7 3 8
222
222
样例输出
<
参考题解
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
int main() {
int len1, k1, len2, k2;
std::cin >> len1 >> k1 >> len2 >> k2;
std::string s1, s2;
std::cin >> s1 >> s2;
long long num1 = std::stoll(s1, nullptr, k1);
long long num2 = std::stoll(s2, nullptr, k2);
if (num1 > num2) {
std::cout << ">" << std::endl;
} else if (num1 == num2) {
std::cout << "=" << std::endl;
} else {
std::cout << "<" << std::endl;
}
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int len1 = scanner.nextInt();
int k1 = scanner.nextInt();
int len2 = scanner.nextInt();
int k2 = scanner.nextInt();
scanner.nextLine(); // consume the remaining newline
String s1 = scanner.nextLine();
String s2 = scanner.nextLine();
long num1 = Long.parseLong(s1, k1);
long num2 = Long.parseLong(s2, k2);
if (num1 > num2) {
System.out.println(">");
} else if (num1 == num2) {
System.out.println("=");
} else {
System.out.println("<");
}
scanner.close();
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
len1,k1,len2,k2 = map(int, input().split())
s1 = input()
s2 = input()
num1 = int(s1,k1)
num2 = int(s2,k2)
if num1 > num2:
print(">")
elif num1==num2:
print("=")
else:
print("<")
第二题
题目:数字游戏
给定长度为n的序列a1,a2,...,an,考虑将连续相邻的若干个(1个或多个)元素分组并求和,得到一个新的单调不减序列,要求满足条件的最大分组数。
输入描述
第一行:一个整数n(1<=n<=5000),表示序列长度。
第二行:用空格隔开的n个整数,取值范围为[1,100000]。
输出描述
输出最大分组数。
样例输入一
5
8 3 7 3 1
样例输出一
2
说明:可分成[8,3]和[7,3,1]两组
样例输入二
3
5 3 1
样例输出二
1
说明:只能分成一组[5,3,1]。
参考题解
枚举,我们枚举第一段子数组,对于后续的子数组来说,策略如下:不断叠加,只要当前和大于等于之前一段的和,那么就马上开始新的一段。(如果叠加完了都没有大于之前的,那么这一段之前添加到前一段中)。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
int n;
std::cin >> n;
std::vector<int> arr(n);
for (int i = 0; i < n; ++i) {
std::cin >> arr[i];
}
int ans = 1;
for (int i = 0; i < n; ++i) {
int pre = 0;
for (int k = 0; k <= i; ++k) {
pre += arr[k];
}
int cur = 0;
int cnt = 1;
for (int j = i + 1; j < n; ++j) {
cur += arr[j];
if (cur >= pre) {
pre = cur;
cur = 0;
cnt += 1;
}
}
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

