百度笔试 百度笔试题 0825

笔试时间:2024年08月25日 秋招

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

第一题

题目:时钟指针

小A的寝室里放着一个时钟。时钟有时针,分针,秒针三种指针。在某些时刻,时钟会记录下当前时间,格式为 hh:mm:ss 。时钟上看不出日期,每天零点,三根指针都会归零。现在小A得到了一系列被记录的时间,且这些时间是按照先后顺序被记录的。小A想让你算算,每两个时间点之间,秒针至少转了多少圈。注:一天有 24 个小时,1 小时有 60 分钟,1 分钟有 60 秒,秒针一分钟转一圈。

输入描述

第一行一个整数  n(2<=n<=10^5) ,代表时间序列中时间点的个数。

第二行 n 个字符串,每个字符串代表一个时间点,格式为 hh:mm:ss(0<=hh<=24, 0<=mm<60, 0<=s<60)

输出描述

n-1 个数,第 i 个数表示第 i~i+1 时间点秒针转过的圈数。

输出结果和答案的绝对误差或相对误差不超过 10^-5  即被认为正确。

样例输入一

2

10:00:00 10:00:30

样例输出一

0.5000000000

说明

从 10:00:00 至 10:00:30 至少过了半分钟,秒针在时钟上走了半圈

样例输入二

3

10:00:00 09:00:00 08:00:00

样例输出二

1380.0000000000 1380.0000000000

说明

从 10:00:00 至 09:00:00 至少过了 23 小时,秒针在时钟上走了 1380 圈

从 09:00:00 至 08:00:00 至少过了 23 小时,秒针在时钟上走了 1380 圈

样例输入三

2

00:00:00 00:00:00

样例输出三

0.0000000000

参考题解

模拟。

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

#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
vector<string> solve(int n, const vector<string>& times) {
    vector<string> ans;
    for (int i = 1; i < n; ++i) {
        int h1, m1, s1, h2, m2, s2;
        char colon;
        istringstream iss1(times[i-1]);
        istringstream iss2(times[i]);
        
        iss1 >> h1 >> colon >> m1 >> colon >> s1;
        iss2 >> h2 >> colon >> m2 >> colon >> s2;

        int seconds1 = h1 * 3600 + m1 * 60 + s1;
        int seconds = h2 * 3600 + m2 * 60 + s2;

        if (seconds < seconds1) {
            seconds += 86400;  // 加上一天的秒数
        }

        int diff = seconds - seconds1;
        double rs = diff / 60.0;

        ostringstream oss;
        oss << fixed << setprecision(10) << rs;
        ans.push_back(oss.str());
    }
    return ans;
}

int main() {
    int n;
    cin >> n;
    vector<string> times(n);
    for (int i = 0; i < n; ++i) {
        cin >> times[i];
    }
    vector<string> res = solve(n, times);
    for (int i = 0; i < res.size(); ++i) {
        cout << res[i];
        if (i < res.size() - 1) cout << " ";
    }
    cout << endl;
    return 0;
}

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

import java.io.*;

public class Main {
    public static void solve(int n, String[] times, StringBuilder sb) {
        for (int i = 1; i < n; i++) {
            int seconds1 = parseTime(times[i - 1]);
            int seconds = parseTime(times[i]);

            if (seconds < seconds1) {
                seconds += 86400;  // 加上一天的秒数
            }

            int diff = seconds - seconds1;
            appendFormattedDouble(sb, (double)diff / 60.0);
            sb.append(' ');
        }
    }

    private static int parseTime(String time) {
        int h = (time.charAt(0) - '0') * 10 + (time.charAt(1) - '0');
        int m = (time.charAt(3) - '0') * 10 + (time.charAt(4) - '0');
        int s = (time.charAt(6) - '0') * 10 + (time.charAt(7) - '0');
        return h * 3600 + m * 60 + s;
    }

    private static void appendFormattedDouble(StringBuilder sb, double value) {
        sb.append((int)value).append('.');
        value -= (int)value;
        for (int i = 0; i < 10; i++) {
            value *= 10;
            sb.append((int)value);
            value -= (int)value;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int n = Integer.parseInt(br.readLine());
        String[] times = br.readLine().split(" ");
        
        StringBuilder sb = new StringBuilder(n * 15); // 预分配足够的空间
        solve(n, times, sb);
        
        bw.write(sb.toString().trim());
        bw.newLine();
        
        br.close();
        bw.close();
    }
}

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

def sove(n, times):
    ans = []
    for i in range(1, n):
        h1, m1, s1 = map(int, times[i - 1].split(':'))
        h2, m2, s2 = map(int, times[i].split(':'))

        seconds1 = h1 * 3600 + m1 * 60 + s1
        seconds = h2 * 3600 + m2 * 60 + s2

        if seconds < seconds1:
            seconds += 86400  # 加上一天的秒数

        diff = seconds - seconds1
        rs = diff / 60.0

        ans.append(f"{rs:.10f}")

    return ans


n = int(input())
times = [c for c in input().split()]
res = sove(n, times)
print(' '.join(map(str, res)))

第二题

题目:数学题

牛牛最近在做比大小的小学数学题目,每个题目可以表示为:a op b ( ) b op a 。a,b 分别表示两个正整数。op 表示一个数学意义上的运算符(包括加 + 减 - 乘 * 除 / 和乘方 ^ 运算)。( ) 表示你需要填写的答案,是符号 =, < , >  其中的一个。本题共有 t 组数据。

输入描述

第 1 行,一个正整数 t(1<=t <= 5*10^4) 表示数据的组数。

第 2 行到第 t+1 行,每行先给出 2 个正整数a,b (1<=a,b<=10^9),再给出一个符号 op 表示一组询问,其中 op是 +、-、*、/、^ 中的一个。

输出描述

输出 t 行,每行一个符号 ans 表示答案。

样例输入一

2

1 1 +

1 2 -

样例输出一

=

<

说明

1+1=1+1,所以第一个询问应该输出=

1-2<2-1,所以第二个询问应该输出<

样例输入二

3

7 8 *

3 2 /

9 8 ^

样例输出二

=

\>

<

说明

7*8=8*7=56,所以第一个询问应该输出=

3/2>2/3,所以第二个询问应该输出>

9^8<8^9,所以第二个询问应该输出<

参考题解

模拟。

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

#include <iostream>
#include <vector>
#include <cmath>
#include <string>

using namespace std;

char check(double a, double b) {
    if (a > b) return '>';
    if (a < b) return '<';
    return '=';
}

int main() {
    int n;
    cin >> n;

    vector<char> res;

    for (int i = 0; i < n; i++) {
        double a, b;
        string op;
        cin >> a >> b >> op;

        if (op == "+" || op == "*") {
            res.push_back('=');
        } else if (op == "-") {
            res.push_back(check(a - b, b - a));
        } else if (op == "/") {
            res.push_back(check(a / b, b / a));
        } else if (op == "^") {
            double log_a = log(a);
            double log_b = log(b);
            i

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

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

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

全部评论
这个笔试做完多久进下一个环节,我笔试做完3天了还是笔试中,是挂了吗😓
点赞 回复 分享
发布于 08-28 23:52 广西

相关推荐

重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
2 8 评论
分享
牛客网
牛客企业服务