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