百度笔试 百度笔试题 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%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

查看5道真题和解析