3G实验室2024级二面题解
前言
本次二面题对我自身而言还是十分有难度的,在考核之时只能写出四道,其中题目对我自身代码实现能力,理解题意能力也是一个极大的考验,也借此机会找到自己在学习上的不足。因此将此次二面题目总结为博客一篇,写出我个人对于题目的理解,以此总结自身做题经验,巩固自身进度。
1.小车问题
题目描述
甲、乙两人同时从 A 地出发要尽快同时赶到 B 地。出发时 A 地有一辆小车,可是这辆小车除了驾驶员外只能带一人。已知甲、乙两人的步行速度一样,且小于车的速度。问:怎样利用小车才能使两人尽快同时到达。
输入格式
仅一行,三个实数,分别表示 AB 两地的距离 s,人的步行速度 a,车的速度 b。
输出格式
两人同时到达 B 地需要的最短时间,保留 6 位小数。
样例输入 #1
120 5 25
样例输出 #1
9.600000
提示
数据规模与约定
对于 100% 的数据,保证 0≤s,a,b≤10^9。
解题思路
作为第一道签到题,就让我完全没有思路,模拟的过程在代码实现上没有难度,只是在解题上对我来说有数学难度。首先,我们要知道的是,无论采取怎么样的策略,甲乙两个人必将同时到达,即先载乙到半路,再让汽车回头载上甲,使得甲乙到达的时间为相同的。
那么我们假设甲中途的下车点为C,那么:
车从A到C的时间:Ta→c = S / b ;
又由于甲乙的步行速度是一样的,那么就意味着,甲乙的运动路程是对称的,如图

那么这个图一出来,其实方程也不难列出了x/a=(s-2x+s-x)/b,解得x=2as/(3a+b),知道了x,也就不难知道t=x/a+(s-x)/b。OK,知道了如何进行计算,我们马上用代码实现这个过程。
代码实现
#include <stdio.h>
int main() {
double a, b, s, t ,x;
scanf("%lf %lf %lf",&s,&a,&b);
x=2*a*s/ (3*a+b);
t= x/a + (s-x)/b;
printf(" %.6lf ",t);
return 0;
}
2.笨小猴
题目描述
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设 maxn 是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果maxn - minn是一个质数,那么笨小猴就认为这是个 Lucky Word,这样的单词很可能就是正确的答案。
输入格式
一个单词,其中只可能出现小写字母,并且长度小于 100 100 100。
输出格式
共两行,第一行是一个字符串,假设输入的的单词是 Lucky Word,那么输出 Lucky Word,否则输出 No Answer;
第二行是一个整数,如果输入单词是 Lucky Word,输出 maxn-minn 的值,否则输出 0。
样例输入 #1
error
样例输出 #1
Lucky Word
2
样例输入 #2
olympic
样例输出 #2
No Answer
0
解题思路
这道题就是一道简单的用哈希表解决的问题,在考试的时候,没看清题目的要求,导致差值在非质数数还输出他们差值的结果导致最后修改的时候,没来得及重新提交,少拿了八十分,这个故事告诉我们审题需谨慎。(哭脸)
在这道题里面,我们只需要统计给出字符串各自字母的数字,再在哈希表中找出最大和最小值的,再进行一个简单的质数判断。
代码实现
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int num(int nums){
if(nums == 0||nums == 1){
return 0;
}
for(int i=2;i<= sqrt(nums)/2;i++){
if(nums%i==0){
return 0;
}
}
return 1;
}
int main() {
char s[100];
scanf("%s",s);
int len = strlen(s);
int hash[26]={
0};
for(int i=0;i<len;i++){
hash[s[i]-'a']++;
}
int max=0,min=100;
for(int i=0;i<26;i++){
if(hash[i]==0){
continue;
}
max=fmax(hash[i],max);
min=fmin(hash[i],min);
}
int res = max-min;
if(num(res)){
printf("Lucky Word\n");
printf("%d\n",res);
return 0;
}
printf("No Answer\n");
printf("0\n");
return 0;
}
顺带提一句,这个质数的判断显然不是算法的最优解,通过埃式筛能够更快的进行相关质数的筛查。
void sieve_of_eratosthenes(int n) {
// 创建一个数组,用于标记是否为素数
int prime[n+1];
// 初始化数组,假定所有数都是素数
for (int i = 0; i <= n; i++) {
prime[i] = 1;
}
prime[0] = 0, prime[1] = 0;
// 埃拉托斯特尼筛法
for (int i = 2; i <= sqrt(n); i++) {
if (prime[i]) {
for (int j = i * i; j <= n; j += i) {
prime[j] = 0; // 将i的倍数标记为非素数
}
}
}
}
3.拯救oibh总部
题目背景
oibh 总部突然被水淹没了!现在需要你的救援……
题目描述
oibh 被突来的洪水淹没了,还好 oibh 总部有在某些重要的地方起一些围墙。用 * 号表示,而一个四面被围墙围住的区域洪水是进不去的。
oibh 总部内部也有许多重要区域,每个重要区域在图中用一个 0 表示。
现在给出 oibh 的围墙建设图,问有多少个没被洪水淹到的重要区域。
输入格式
第一行为两个正整数

本文是3G实验室2024级二面题解,包含小车问题、笨小猴、拯救oibh总部等7道题目。作者分享了自身解题思路和代码实现,如小车问题需数学计算,笨小猴用哈希表解决,拯救oibh总部用深度搜索算法等,借此总结做题经验。
最低0.47元/天 解锁文章
2350






