首页 > 其他分享 >蓝桥杯模拟题--扫把扶不扶

蓝桥杯模拟题--扫把扶不扶

时间:2025-01-10 19:31:59浏览次数:3  
标签:面试 -- s2 s1 ret 模拟题 蓝桥 int timeDif

目录

前言

问题描述

输入格式

输出格式

 题解代码

timeDif()函数

主函数


前言

今天给大家介绍的题目是蓝桥杯模拟题--扫把扶不扶。

大家有什么更好的思路,可以分享在评论区。

问题描述

你正在参加一场程序员的终极面试,和你竞争的是小蓝。你们都顺利地通过了前几轮筛选,来到了最后一轮的现场面试环节。

你到达公司门口的时间是 S1,和面试官约定的面试时间是 S2。在约定时间到达前(S1 ~ S2),你可以选择提前开始面试。然而,如果超过了面试时间,即便只晚了1秒,你都将失去面试机会,直接被淘汰。

你的面试会持续T分钟。

小蓝到达公司门口的时间是S3,和面试官约定的面试时间是S4。由于你在前几轮的表现比他好,因此小蓝必须在你结束面试后才能开始他的面试。如果小蓝在他的面试时间之前没有开始面试,他也将失去面试机会,直接被淘汰。

面试存在竞争机制:如果只有你或小蓝中的一人参与了面试那么参与面试的那个人将胜出。如果你和小蓝都没有参与面试,你们将双双失败。

“那如果两个人都参与了面试,谁将胜出呢?”你正想着,突然发现公司门口的不远处躺着一把扫把,看样子是面试官故意放的。你想扶起它,但这需要你花费x分钟的时间。根据你所了解的套路,如果你扶起了扫把,并参加了面试,那么你和小蓝的竞争中,你必定能够胜出。相对的,如果你没有扶起扫把,并且你和小蓝都参加了面试,那么小蓝必定能够胜出。现在,你和小蓝都会采取最优的策略来确保自己胜出(如果无论如何也无法使自己胜出,则应优先确保双双失败)。请问最后的结果会是如何?

输入格式

输入包含多组数据。

第一行包含一个整数N (1 < N< 10_{}^{}^3),表示数据的组数。
接下来N 组数据,每组数据包含三行:

·第一行包含两个时间字符串 S1, S2,以空格分隔,表示你到达公司门口的时间和你和面试官约定的面试时间。

·第二行包含两个时间字符串 S3,S4,以空格分隔,表示小蓝到达公司门口的时间和小蓝和面试官约定的面试时间。

·第三行包含两个整数T,x (1<T, x< 120),以空格分隔,分别表示你的面试时长和你扶起扫把所需的时间(单位:分钟)。

时间的格式为 HH:MM:SS,其中 HH 表示小时 (00<
HH < 21),MM 表示分钟 (00 < MM < 59), SS 表示秒 (00 < SS < 59)。

输出格式

对于每组数据,输出一个字符串,表示最终的结果。。如果你胜出了,输出 You。

如果小蓝胜出了,输出 Lan。

如果你们双双失败了,输出 Draw。

 题解代码

#include<iostream>
#include<string>
using namespace std;

int timeDif(string s1, string s2)
{
	int s1H = ((int)s1[0] - 48) * 10 + ((int)s1[1] - 48);
	int s2H = ((int)s2[0] - 48) * 10 + ((int)s2[1] - 48);
	int Hdif = (s2H - s1H) * 3600;
	int s1M = ((int)s1[3] - 48) * 10 + ((int)s1[4] - 48);
	int s2M = ((int)s2[3] - 48) * 10 + ((int)s2[4] - 48);
	int Mdif = (s2M - s1M) * 60;
	int s1S = ((int)s1[6] - 48) * 10 + ((int)s1[7] - 48);
	int s2S = ((int)s2[6] - 48) * 10 + ((int)s2[7] - 48);
	int Sdif = s2S - s1S;
	return Hdif + Mdif + Sdif;
}

int main()
{
	int N;
	cin >> N;
	int *ret = new int[N];
	string s1, s2, s3, s4;
	int T, x;
	for (int i = 0; i < N; i++) {
		cin >> s1;
		cin >> s2;
		cin >> s3;
		cin >> s4;
		cin >> T >> x;
		T *= 60;
		x *= 60;
		//我来了,小蓝没来
		if (timeDif(s1, s2) >= 0 && timeDif(s3, s4) < 0)
			ret[i] = 0;
		//我没来,小蓝来了
		else if (timeDif(s1, s2) < 0 && timeDif(s3, s4) >= 0)
			ret[i] = 1;
		//两人都没来
		else if (timeDif(s1, s2) < 0 && timeDif(s3, s4) < 0)
			ret[i] = 2;
		//两人都来了,小蓝不能面试
		else if (T > timeDif(s2, s4))
			ret[i] = 0;
		//两人都来了,我能扶扫把
		else if (x <= timeDif(s1, s2))
			ret[i] = 0;
		//两人都来了,我没扶扫把
		else if (x > timeDif(s1, s2))
			ret[i] = 1;
	}

	for (int i = 0; i < N; i++) {
		switch (ret[i]) {
		case 0:
			cout << "You" << endl;
			break;
		case 1:
			cout << "Lan" << endl;
			break;
		case 2:
			cout << "Draw" << endl;
			break;
		}
	}

	delete[]ret;
}

timeDif()函数

timeDif 函数主要用于计算两个时间字符串 s1 和 s2 之间的时间差。

首先,函数将时间字符串 s1 和 s2 拆分为小时、分钟和秒的部分进行处理。对于每个时间字符串,函数通过字符的 ASCII 码来提取时间信息。以小时部分为例,对于 s1,它将 s1 的第一个字符 s1[0] 转换为整数(通过 (int)s1[0] - 48),并乘以 10,再加上 s1 的第二个字符 s1[1] 转换为整数(通过 (int)s1[1] - 48),从而得到 s1 的小时数,存储在 s1H 中。同样的方式用于计算 s2 的小时数,存储在 s2H 中。然后,将小时差 (s2H - s1H) 乘以 3600 转换为秒,存储在 Hdif 中,因为一小时等于 3600 秒。

对于分钟部分,函数提取 s1 的第四和第五个字符 s1[3] 和 s1[4],将它们转换为整数并计算出 s1 的分钟数,存储在 s1M 中。同样计算 s2 的分钟数存储在 s2M 中。将分钟差 (s2M - s1M) 乘以 60 转换为秒,存储在 Mdif 中,因为一分钟等于 60 秒。

对于秒部分,函数提取 s1 的第七和第八个字符 s1[6] 和 s1[7],将它们转换为整数得到 s1 的秒数,存储在 s1S 中。同样得到 s2 的秒数存储在 s2S 中。将秒差存储在 Sdif 中。

最后,将计算得到的小时差(以秒为单位)Hdif、分钟差(以秒为单位)Mdif 和秒差 Sdif 相加,得到最终的时间差(以秒为单位),并将结果作为函数的返回值。

主函数

主函数是程序的入口点,其主要目的是根据输入的信息进行一系列的逻辑判断,并输出相应的结果。

首先,主函数声明一个整数变量 N,。这个 N 表示后续需要处理的信息组数。接着,使用 new 操作符动态分配一个长度为 N 的整数数组 ret,用于存储每组信息的最终结果。同时,声明了四个字符串变量 s1s2s3s4 和两个整数变量 Tx,它们将在后续的输入中被使用。

随后,程序进入一个 for 循环,该循环将执行 N 次,每次循环对应一组信息的处理。在每次循环中,程序会从标准输入读取四个时间字符串 s1s2s3 和 s4 以及两个整数 T 和 x。这里的 s1s2s3 和 s4 应该表示不同的时间点,而 T 和 x 可能是某种时间阈值或时间长度。读取 T 和 x 后,将它们乘以 60,将其单位从分钟转换为秒,以便后续的时间比较和计算在同一时间单位下进行。

在获取到一组信息后,程序使用 timeDif 函数计算不同时间对之间的时间差,并根据这些时间差和 Tx 的值进行一系列条件判断:

  • 如果 timeDif(s1, s2) >= 0 且 timeDif(s3, s4) < 0,表示一种情况(例如,“我来了,小蓝没来”),将 ret[i] 置为 0。
  • 若 timeDif(s1, s2) < 0 且 timeDif(s3, s4) >= 0,表示另一种情况(如 “我没来,小蓝来了”),将 ret[i] 置为 1。
  • 当 timeDif(s1, s2) < 0 且 timeDif(s3, s4) < 0,表示 “两人都没来”,将 ret[i] 置为 2。
  • 当 T > timeDif(s2, s4) 时,意味着 “两人都来了,小蓝不能面试”,将 ret[i] 置为 0。
  • 若 x <= timeDif(s1, s2) ,表示 “两人都来了,我能扶扫把”,将 ret[i] 置为 0。
  • 而 x > timeDif(s1, s2) ,表示 “两人都来了,我没扶扫把”,将 ret[i] 置为 1。

在完成所有 N 组信息的处理和判断后,程序进入另一个 for 循环,遍历 ret 数组。对于 ret[i] 的每个元素,使用 switch 语句进行输出:

  • 当 ret[i] 的值为 0 时,输出 "You"
  • 当 ret[i] 的值为 1 时,输出 "Lan"
  • 当 ret[i] 的值为 2 时,输出 "Draw"

最后,使用 delete[] ret 释放之前动态分配的数组内存,防止内存泄漏。

标签:面试,--,s2,s1,ret,模拟题,蓝桥,int,timeDif
From: https://blog.csdn.net/2401_84904048/article/details/145063647

相关文章

  • Buildroot 的make提示
    显示make执行的所有命令:$makeV=1<target>显示具有defconfig的主板列表:$makelist-defconfigs显示所有可用目标:$makehelp并非所有目标始终可用,.config文件中的某些设置可能会隐藏某些目标:busybox-menuconfig仅在busybox启用时有效;linux-menuconfig和li......
  • YOLOv11全网最新创新点改进系列:“将Lion自动优化与YOLOv11完美结合,智能优化算法驱动,赋
    YOLOv11全网最新创新点改进系列:“将Lion自动优化与YOLOv11完美结合,智能优化算法驱动,赋能精准检测与高效推理,让您的应用在复杂场景下表现更卓越!”视频讲解戳这里,文档可以不看,视频内容一定要看,干货满满!祝大家少走弯路!!!所有改进代码均经过实验测试跑通!截止发稿时YOLOv11已改进......
  • 力扣21、合并两个有序链表
    目录1、题目2、思路3、代码若有错误,欢迎指正! 1、题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1:输入:l1=[1,2,4],l2=[1,3,4]输出:[1,1,2,3,4,4]示例2:输入:l1=[],l2=[]输出:[]示例......
  • JavaScript ES2023/2024 新特性学习总结
    JavaScriptES2023/2024新特性学习总结ES2023/2024规范新特性与最佳实践总结作者:在人间耕耘更新时间:2025年1月10日目录前言核心特性概览ES2023新特性实战ES2024新特性实战实际开发应用场景性能与最佳实践总结前言ES2023/2024规范引入多项新特性,本文......
  • 无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型
    无需昂贵GPU:本地部署开源AI项目LocalAI在消费级硬件上运行大模型随着人工智能技术的快速发展,越来越多的AI模型被广泛应用于各个领域。然而,运行这些模型通常需要高性能的硬件支持,特别是GPU(图形处理器),这往往导致较高的成本门槛。为了打破这一限制,开源AI项目LocalAI提供了一种......
  • 农业4.0背后的智慧引擎:机器学习助力精准农事决策
    农业4.0背后的智慧引擎:机器学习助力精准农事决策在21世纪的科技浪潮中,农业作为人类生存和发展的基石,正经历着前所未有的变革。从传统的农耕文明到现代化的机械农业,再到如今智能化的农业4.0时代,每一步都凝聚着科技的力量。而在这场变革中,机器学习作为人工智能的重要分支,正逐......
  • 力扣283题——移除0
    要点就是不说废话,看题: 这题就是快慢指针法的进阶一点点,需要把第一次遍历完的数组再继续填空,把后面的空填充为0,这里给出我的做法:classMain{publicvoidmove(int[]nums){intn=nums.length;intslow=0;for(intfast=0;fast<n;fast++){......
  • C++并发编程之基于锁的数据结构的适用场合与需要考虑和注意的问题
    在C++多线程编程中,锁是一种常用的同步机制,用于保护共享数据,防止多个线程同时访问和修改,从而避免数据不一致或其他并发问题。基于锁的数据结构适用于多种并发编程场合,但同时也需要注意一些关键问题。1. 适用的并发编程场合锁在以下几种场合特别有用:1.1 保护共享数据当多个......
  • exam4-作业整理(包含部分统考真题)
    exam4-作业整理(包含部分统考真题)H1概述相关CPU提速计算答案是D这里把这道题拿过来,主要是因为容易出小错误,速度提升50%,不意味着时间变成50%v=v*3/2;t=t*2/3CPI与时间答案是C这里要算时间,CPI*指令数量*指令周期时间机器字长的寄存器机器字长......
  • 基于yolov5,在labelimg标记后训练数据集
    来自一个小白的视角,使用labelimg标记,训练数据集,含label的功能使用,yolov5数据集训练容易产生的错误及解决方式----纯小白,如有遗漏或错误,欢迎大家改正关于Anaconda环境配置,yolov5的下载可以看我之前的博客:通过Yolov5使用ip摄像头实时监测(CPU)_yolo5控制台cmd检测网络摄像头-CSD......