【华为OD机试真题C++】最大时间【2022Q4|100分】-创新互联
■ 题目描述
成都创新互联公司是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,小程序设计,十年建站对自上料搅拌车等多个行业,拥有多年的网站制作经验。【大时间】
给定一个数组,里面有 6 个整数,求这个数组能够表示的大 24 进制的时间是多少,输出这个时间,无法表示输出 invalid。
输入描述
输入为一个整数数组,数组内有六个整数。
输入整数数组长度为 6,不需要考虑其它长度,元素值为 0 或者正整数,6 个数字每个数字只能使用一次。
输出描述
输出为一个 24 进制格式的时间,或者字符串”invalid“。
备注:
输出时间格式为 xxxxx 式。
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
[0,2,3,0,5,6]
输出
23:56:00
C++代码实现:
#includeusing namespace std;
void SplitInt(string input, vector&output, char patten)
{
string one_word;
int j = 0;
input += patten;
for (int i = 0; i< input.size(); i++) {
if (input[i] == patten) {
one_word = input.substr(j, i - j);
if (!one_word.empty()) {
output.push_back(stoi(one_word));
}
one_word.clear();
j = i + 1;
}
}
}
string LargestTimeFromDigits(vector&vec)
{
sort(vec.begin(), vec.end());
string maxTime;
bool hasNextPermutation = true;
while (hasNextPermutation) {
string hour = to_string(vec[0]) + to_string(vec[1]);
string minute = to_string(vec[2]) + to_string(vec[3]);
string second = to_string(vec[4]) + to_string(vec[5]);
hasNextPermutation = next_permutation(vec.begin(), vec.end());
auto curTime = hour + ":" + minute + ":" + second;
if (stoi(hour) >= 24 || stoi(minute) >= 60 || stoi(second) >= 60) {
continue;
}
maxTime = max(maxTime, curTime);
}
return maxTime;
}
int main(int argc, char **argv)
{
string input;
while (getline(cin, input)) {
if (!input.empty()) {
input = input.substr(1, input.size() - 1);
vectorvec;
SplitInt(input, vec, ',');
string time_s = LargestTimeFromDigits(vec);
!time_s.empty() ? cout<< time_s<< endl : cout<< "invalid"<< endl;
}
}
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
分享文章:【华为OD机试真题C++】最大时间【2022Q4|100分】-创新互联
网站地址:http://cdiso.cn/article/dgjhcj.html