京东笔试 京东笔试题 0817

笔试时间:2024年08月17日

历史笔试传送门:2023秋招笔试合集

第一题

题目

村子里有一些桩子,从左到右高度依次为1,1+2,1+2+3…,每两颗桩子之间的间隔为1.现在下了一场大雪,但是不知道雪下了多厚,现在给你两个数字,这是雪后某相邻两个桩子在雪面的高度,请你通过这两个数字计算雪的厚度。

输入描述

在一行中输入两个正整数a,b

1≤a<b≤5*10^5

输出描述

在一行中输出一个整数代表雪的厚度。我们可以证明,答案一定存在。

样例输入一

8 13

样例输出一

2

样例输入二

10 15

样例输出二

0

参考题解

模拟。算出两个柱子a, b之间的差值c,下雪前b柱子的高度 :1 + 2 + 3 + ... + c。减去b柱子下雪前的高度就是雪的厚度。

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int a, b;
    cin >> a >> b;
    int c = b - a;
    int sum = (c + 1) * c / 2;
    cout << sum - b;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int a = scanner.nextInt();
        int b = scanner.nextInt();
        
        int c = b - a;
        int sum = (c + 1) * c / 2;
        
        System.out.println(sum - b);
        
        scanner.close();
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

a = int(input())
b = int(input())

c = b - a
sum_value = (c + 1) * c // 2

print(sum_value - b)

第二题

题目

牛牛有一种锯齿状的积木,这种积木比较长,但是每个单位长度的高度是相等的,高度为1或者2。现在牛牛拿出了两块长度分别为n 和 m 的积木,她现在想把这两块积木拼接在一起,即使中间有空隙也没有关系。但是拼接后的积木的高度要不超过 3,请你帮助牛牛计算在满足这个前提下拼接后的积木的长度最短可以是多少。

输入描述

第一行给出两个正整数 n,m,代表第一块和第二块积木的长度;

第二行给出 n 个数字代表第一块积木每个单位的高度;

第三行给出 m 个数字代表第二块积木每个单位的高度;

输出描述

在一行中输出一个正整数代表拼接后积木的最短长度。

样例输入一

7 10

2212112

2112112112

样例输出一

10

样例输入二

3 2

222

22

样例输出二

5

参考题解

C++:[此代码未进行大量数据的测试,仅供参考]

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

int main()
{
    int n, m;
    cin >> n >> m;
    string sn, sm;
    cin >> sn >> sm;

    int res = m + n;
    
    for(int j = - m; j < n; j ++)   //枚举要匹配的起始点
    {
        int idxm = j;
        int cnt = 0; //cnt表示两个字符串重叠之后小于等于3的长度
        bool flag = true;
        int idxn = j > 0 ? j: 0;   //sn字符串的匹配起点
        
        for(int i = j; i < j + m; i ++)  //sm字符串匹配
        {
            if(i < 0) continue;
            if(idxn >= n) break;
            if(sn[idxn] - '0' + sm[i - j] - '0' > 3){
                flag = false;
                break;
            }
            idxn ++;
            cnt ++;
        }
        if(flag)  res = min(res, m + n - cnt);
    }
    cout << res;
    return 0;
}

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        int n = scanner.nextInt();
        int m = scanner.nextInt();
        scanner.nextLine();  // 消耗换行符
        
        String sn = scanner.nextLine();
        String sm = scanner.nextLine();
        
        int res = m + n;
        
        for(int j = -m; j < n; j++) {  // 枚举要匹配的起始点
            int idxm = j;
            int cnt = 0; // cnt表示两个字符串重叠之后小于等于3的长度
            boolean flag = true;
            int idxn = j > 0 ? j : 0;  // sn字符串的匹配起点
            
            for(int i = j; i < j + m; i++) {  // sm字符串匹配
                if(i < 0) continue;
                if(idxn >= n) break;
                if((sn.charAt(idxn) - '0') + (sm.charAt(i - j) - '0') > 3) {
                    flag = false;
                    break;
                }
                idxn++;
                cnt++;
            }
            if(flag) {
                res = Math.min(res, m + n - cnt);
            }
        }
        System.out.println(res);
        

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

2 10 评论
分享
牛客网
牛客企业服务