編程題

題目摘自網友發的2018阿里巴巴在線編程題

輸入數據n(n>=6)代表n個數,從0-9任意輸入n個數,然後在n個數選出6個數xx-xx-xx表示 時:分:秒,求出最小時間和最大時間,若時間無效,則輸出時間無效

例如: 輸入: 6 6 5 4 3 2 1

輸出: 123456 235641

輸入: 6 9 9 9 9 9 9 輸出: 時間無效

結題思路

因爲輸入數字限定爲0-9,記錄每個數字的輸入次數,根據需求取出最大或者最小的數,每取出一個數,對應數字的出現次數減1

main函數

int main(int argc, char *argv[])
{
    int num;
    cin >> num;
    if (num < 6)
    {
        cout << "Input num must be greater than 6" << endl;
        system("pause");
        return 0;
    }

    int data[10] = { 0 };
    int data2[10] = { 0 };
    int tmp;
    for (int i = 0; i < num; i++)
    {
        cin >> tmp;
        data[tmp]++;
    }

    memcpy(data2, data, 10 * sizeof(int));

    cout << "min time is:";
    int ret = 1;
    ret &= output(data, 0, 2);
    ret &= output(data, 0, 3);
    ret &= output(data, 0, 5);
    ret &= output(data, 0, 9);
    ret &= output(data, 0, 5);
    ret &= output(data, 0, 9);
    if (ret == 0)
    {
        cout << endl << "invalid input" << endl;
        system("pause");
        return -1;
    }

    // max time
    cout << "max time is:";
    ret = 1;
    ret &= output(data2, 2, 0);
    ret &= output(data2, 3, 0);
    ret &= output(data2, 5, 0);
    ret &= output(data2, 9, 0);
    ret &= output(data2, 5, 0);
    ret &= output(data2, 9, 0);
    if (ret == 0)
    {
        cout << endl << "invalid input" << endl;
        system("pause");
        return -1;
    }
    cout << endl;
    system("pause");
}

輸出函數

int output(int* pVal, int start, int end)
{
    if (start <= end)
    {
        for (int i = start; i <= end; i++)
        {
            if (pVal[i] > 0)
            {
                cout << i;
                pVal[i]--;
                return 1;
            }
        }
    }
    else
    {
        for (int i = start; i >= end; i--)
        {
            if (pVal[i] > 0)
            {
                cout << i;
                pVal[i]--;
                return 1;
            }
        }
    }
    return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章