题目描述:
给定一个数组,里面有6个整数,求这个数组能够表示的最大24进制的时间是多少,输出这个时间,无法表示输出invalid。
输入描述:
输入为一个整数数组,数组内有六个整数。
输入整数数组长度为6,不需要考虑其他长度,元素值为0或者正整数,6个数字每个数字只能使用一次。
输出描述:
输出为一个24进制格式的时间,或者字符串“invalid”。
示例1
输入
[0,2,3,0,5,6]
输出
23:56:00
示例2
输入
[9,9,9,9,9,9]
输出
invalid
备注:
输出时间格式为xx:xx:xx格式。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
string stringConvertTime(vector<int>& str)
{
string res = "000000";
string invalid = "invalid";
vector<int> cnt(10, 0);
vector<bool> flag_in_place(6, false);
for (int ix = 0; ix < 6; ++ix)
{
cnt[str[ix]]++;
}
if ((cnt[3] == 6) || (cnt[4] == 6) || ((cnt[5] == 5)))
return invalid;
int n = 6;
int place = 0;
bool flag = false;
for (int j = 9; j >= 6; --j)
{
if (cnt[j] > 2)
return invalid;
else
{
while (cnt[j])
{
if (!flag_in_place[3])
{
res[3] = j + '0';
cnt[j]--;
flag_in_place[3] = true;
}
else if (!flag_in_place[5])
{
res[5] = j + '0';
cnt[j]--;
flag_in_place[5] = true;
}
else
return invalid;
}
}
}
for (int j = 5; j > 0; --j)
{
while (cnt[j] > 0)
{
if (j == 2 || j == 1)
{
place = 0;
}
if ((j == 3) || (j == 4))
{
place = 1;
}
if (j == 5)
{
place = 2;
}
while (flag_in_place[place])
place++;
if (place < 6)
{
res[place] = j + '0';
flag_in_place[place] = true;
cnt[j]--;
place++;
}
}
}
return res;
}
int main()
{
vector<int> input;
int ixp;
int N = 6;
string str;
for (int ix = 0; ix < N; ++ix)
{
cin >> ixp;
input.push_back(ixp);
}
str = stringConvertTime(input);
if (str[0] == 'i')
cout << "invalid" << endl;
else
cout << str[0] << str[1] << ":" << str[2] << str[3] << ":" << str[4] << str[5] << endl;
return 0;
}
结果验证: