【华为2019年校园招聘】2019-4-17 软件题-最大时间问题

2023-05-16

输入描述

输入为一个整数数组,数组内有六个整数。
输入整数数组长度为6, 不需要考虑其他长度,元素值为0或者正整数,6个数字每个数字只能使用一次。

输出描述

输出为一个24进制格式的时间,或者字符串“invalid”

示例:

输入
[0,2,3,0,5,6]
输出
23:56:00

输入
[9,9,9,9,9,9]
输出
invalid

解题思路:
这道题要求C/C++运行时间小于3秒,感觉是可以用暴搜的。因为考之前没刷过题,图简单就直接上暴搜了。
基本思路是对于输入的6个数字,遍历所有的排列情况,因为24进制时间本身对时、分、秒数字有大小约束,所以加上剪枝实际上不需要遍历所有的情况。对于每一种合法的时间相互之间比较大小(换算成秒)

代码

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

using namespace std;

// 根据输入的6位时间表示计算其秒数(以秒为单位的数字)
double absolute_time(const vector<int>& nums)
{
	int hour = nums[0] * 10 + nums[1];
	int minu = nums[2] * 10 + nums[3];
	int sec = nums[4] * 10 + nums[5];

	if (hour >= 24 || minu >= 60 || sec >= 60)
	{
		return -1;
	}
	else
	{
		return hour * 3600 + minu * 60 + sec;
	}
}



int main(void)
{
	string array;
	while (getline(cin, array))
	{
		if (array.empty())
		{
			break;
		}
		
		// 解析输入的字符串,转为包含6个数字的向量
		vector<int> nums;
		for (int i = 1; i < 12; i = i + 2)
		{
			int num = array[i] - '0';
			nums.push_back(num);
		}
	
		//遍历这6个数字可以组成的所有的合法的时间
		double max_time = -1;
		vector<int> final;
		for (int i0 = 0; i0 < 6; ++i0)
		{
			if (nums[i0] > 2)  //hour的十位不能超过2
			{
				continue;
			}
			for (int i1 = 0; i1 < 6; ++i1)
			{
				if (i1 == i0)
				{
					continue;
				}
				if (nums[i0] * 10 + nums[i1] >= 24)  //hour不超过24
				{
					continue;
				}

				for (int i2 = 0; i2 < 6; ++i2)
				{
					if ((i2 == i1) || (i2 == i0))
					{
						continue;
					}
					if (nums[i2] >= 6)  //minute十位不超过6
					{
						continue;
					}
					for (int i3 = 0; i3 < 6; ++i3)
					{
						if ((i3 == i2) || (i3 == i1) || (i3 == i0))
						{
							continue;
						}

						if (nums[i2] * 10 + nums[i3] >= 60)
						{
							continue;
						}
						for (int i4 = 0; i4 < 6; ++i4)
						{
							if ((i4 == i3) || (i4 == i2) || (i4 == i1) || (i4 == i0))
							{
								continue;
							}

							if (nums[i4] >= 6)   //second十位不超过6
							{
								continue;
							}
							for (int i5 = 0; i5 < 6; ++i5)
							{
								if ((i5 == i4) || (i5 == i3) || (i5 == i2) || (i5 == i1) || (i5 == i0))
								{
									continue;
								}

								if (nums[i4] * 10 + nums[i5] >= 60)
								{
									continue;
								}

								int sum = i0 + i1 + i2 + i3 + i4 + i5;
								if (sum != 15)  
								{
									continue;
								}

								vector<int> cur_num;
								cur_num.push_back(nums[i0]);
								cur_num.push_back(nums[i1]);
								cur_num.push_back(nums[i2]);
								cur_num.push_back(nums[i3]);
								cur_num.push_back(nums[i4]);
								cur_num.push_back(nums[i5]);
								double cur = absolute_time(cur_num);
								if (cur > max_time)
								{
									max_time = cur;
									final.assign(cur_num.begin(), cur_num.end());
								}
							}
						}
					}
				}
			}
		}
		
		if (max_time > -1)
		{
			cout << final[0] << final[1] << ":" << final[2] << final[3] << ":";
			cout << final[4] << final[5] << endl;
		}
		else
		{
			cout << "invalid" << endl;
		}

	}
	return 0;
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【华为2019年校园招聘】2019-4-17 软件题-最大时间问题 的相关文章

随机推荐

  • git出现Permission denied的解决办法

    git出现Permission denied的解决办法 问题描述 1 xff0c 在 master 分支的基础下创建了一个新的分支 log xff0c 并且在新的分支上 添加了两个新的文件 file1 和 file2 xff0c 然后对修改
  • 内环功控和外环功控的区别

    首先搞清楚内环功控和外环功控的区别 xff1a 内环功控 xff1a 根据接收到的SIR值来调整发射功率 xff0c 如果接收到的SIR值 gt 目标SIR值 xff0c 则通知对等层将空口上的发射功率下调一个步长 xff0c 如果相反 x
  • maven常用总结

    maven常用总结 1 常用的maven命令2 坐标定义3 pom基本配置 1 常用的maven命令 常用 的maven命令包括 xff1a compile xff1a 编译 clean xff1a 清理 test xff1a 测试 pac
  • docker之apt-get update解决方法

    问题 使用docker生成容器后 xff0c 进入容器后 xff0c 提供的指令很少 xff0c 使用apt get组件进行扩展 xff0c 但是会遇到apt get update有时会失败的问题 参考 创建好docker后不能apt ge
  • Nvidia xavier NX通过flash.sh烧录linux系统

    1 环境搭建 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统 安装的 Ubuntu 系统版本为 18 04 LTS xff0c 自行安装即可 xff0c 参考官方文档 xff1a Flashing Sup
  • ubuntu安装ssh以及开启root用户ssh登录

    一般Ubuntu都会默认安装openssh client 但是没有安装openssh server 一 安装ssh sudo apt install openssh client sudo apt install openssh serve
  • HJ28 素数伴侣(二分图最大匹配)

    https www nowcoder com practice b9eae162e02f4f928eac37d7699b352e tpId 61 37 amp amp tqId 61 21251 amp rp 61 1 amp ru 61
  • 【C++】Eigen介绍与使用 —— 4

    一 Eigen介绍 Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 它的License是MPL2 它支持多平台 Eigen采用源码的方式提供给用户使用 xff0c 在使用时只需要
  • Prometheus 入门与实践

    随着容器技术的迅速发展 xff0c Kubernetes 已然成为大家追捧的容器集群管理系统 Prometheus 作为生态圈 Cloud Native Computing Foundation xff08 简称 xff1a CNCF xf
  • 找工作笔试面试那些事儿(1)---C,C++基础和编程风格(1)

    作者 xff1a 寒小阳 时间 xff1a 2013年8月 出处 xff1a http blog csdn net han xiaoyang article details 10473845 声明 xff1a 版权所有 xff0c 转载请注
  • Latex正文中插入罗马数字

    1 问题描述 在用latex写论文的时候 xff0c 有的时候需要在正文里面插入罗马数字 2 解决方法 目前找到一种还算方便的解决办法 xff0c 在正文中插入如下代码 xff1a newcommand RNum 1 uppercase e
  • Opencv error unspecified error incorrect element name operator <<

    1 问题描述 今天在用opencv的FileStorage类进行xml文件读写操作的时候报了个错 源代码如下所示 xff1a include lt opencv2 opencv hpp gt include lt vector gt inc
  • PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别

    注 xff1a 这里说的LDA实际上讲的是Fisher linear discriminant analysis 在machine learning领域 xff0c PCA和LDA都可以看成是数据降维的一种方式 但是PCA是unsuperv
  • 【嵌入式】按键控制 LED

    嵌入式 按键控制 LED 1 操作内容 2 原理解释 2 1 实验箱按键电路 2 2 实验箱LED电路 2 3 寄存器说明 3 操作步骤 3 1 编写键控制 3 2 安装 USB 驱动 3 2 使用 DNW 软件下载裸机程序至 SRAM 中
  • Latex转word

    1 问题描述 最近做毕设的时候本来论文都已经在latex里面写好了 xff0c 但是学院要求用word格式 不想把自己latex写好的公式再打一遍 xff0c 而且word写公式很麻烦 xff0c 有的latex里面的符号word自带的公式
  • ubuntu系统备份与恢复-remastersys方法

    对于刚入门ubuntu的人来说 xff0c 配置各种各样环境的过程中往往会把系统装崩溃 每次都重新安装ubuntu看起来非常麻烦 xff0c 一个好的办法就是把我们某个阶段配置好环境的ubuntu做个备份 xff0c 然后万一系统崩溃了 x
  • 论文阅读-《Semantic Segmentation with Reverse Attention》

    BMVC 2017 oral code https drive google com drive folders 0By2w A aM8Rzbllnc3JCQjhHYnM 1 Motivation 作者这篇文章的主要目的是为了提高seman
  • python numpy中axis的含义

    不同的编程语言对于多维数组的索引方式往往不太一样 xff0c 下面主要讲一下python numpy里面axis的含义 numpy当中axis的值表示的是这个多维数组维度的下标 xff0c 比如有一个二维数组a xff0c a的shape是
  • Deep Watershed Transform for Instance Segmentation

    Min Bai amp Raquel Urtasun UfT 1 传统的分水岭算法简介 图像处理中的分水岭算法常用来做图像区域分割 segmentation xff0c 基本的思路是计算一张energy map来表示图像 xff0c 其中物
  • 【华为2019年校园招聘】2019-4-17 软件题-最大时间问题

    输入描述 输入为一个整数数组 xff0c 数组内有六个整数 输入整数数组长度为6 xff0c 不需要考虑其他长度 xff0c 元素值为0或者正整数 xff0c 6个数字每个数字只能使用一次 输出描述 输出为一个24进制格式的时间 xff0c