吉比特笔试 吉比特笔试题 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%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务