吉比特笔试 吉比特笔试题 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多种语言版本,持续更新中。