华为机试题练习-批处理系统

题目描述:

给定一个数组,里面有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;
}

结果验证:

 

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值