華爲機試——6個數找最大時間

題目描述

* 題目描述:給定一個數組,裏面有6個整數,求這個數組能夠表示的最大24進制的時間是多少,
*           輸出這個時間,無法表示輸出invalid
* 輸入描述:輸入爲一個整數數組,數組內有6個整數
*           輸入整數數組長度爲6,不需要考慮其它長度,元素值爲0或者正整數,
*           6個數字每個數字只能使用一次。
* 輸出描述:輸出爲一個24進賬格式的時間,或者字符串“invalid”

* 示例輸入:[0,2,3,0,5,6]
* 示例輸出: 23:56:00

代碼實現

/**************************************************************
 * * 題目描述:給定一個數組,裏面有6個整數,求這個數組能夠表示的最大24進制的時間是多少,
 * *           輸出這個時間,無法表示輸出invalid
 * * 輸入描述:輸入爲一個整數數組,數組內有6個整數
 * *           輸入整數數組長度爲6,不需要考慮其它長度,元素值爲0或者正整數,
 * *           6個數字每個數字只能使用一次。
 * * 輸出描述:輸出爲一個24進賬格式的時間,或者字符串“invalid”
 * * 
 * * 示例輸入:[0,2,3,0,5,6]
 * * 示例輸出: 23:56:00
 * **************************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

#define IN_BUF_SIZE             6

/* 在數組中找不大於某數的最大數字 */
int find_max(int* src,int up_load)
{
    if(NULL == src)
    {
            printf("[Error]:input is NULL!func:%s Line:%d\n\r",__FUNCTION__,__LINE__);
            return -1;
    }

    int tmp=-1,point=0;

    while(point < IN_BUF_SIZE)
    {
            if(*(src+point) < up_load && -1 != *(src+point))
            {
                    if(tmp < *(src+point))
                            tmp = *(src+point);
            }
            point++;
    }

    point = 0;
    /* 將已用的數字置爲-1 */
    while(point < IN_BUF_SIZE)
    {
            if(tmp == *(src+point))
            {
                    *(src+point) = -1;
                    break;
            }
            point++;
    }

    return tmp;
}

void find_max_time(int* src)
{
    if(NULL == src)
    {
            printf("[Error]:input is NULL!func:%s Line:%d\n\r",__FUNCTION__,__LINE__);
            return;
    }

    int h_h=-1,h_l=-1;
    int m_h=-1,m_l=-1;
    int s_h=-1,s_l=-1;

    h_h = find_max(src,3);                  /* 小時高位範圍:0-2 */
    if(2 == h_h)
            h_l = find_max(src,4);          /* 當時間高位是2的時候,低位最大隻能到4 */
    else
            h_l = find_max(src,10);         /* 時間高位是0-1時,低位範圍是0-9 */

    m_h = find_max(src,6);                  /* 分鐘高位 */
    m_l = find_max(src,10);

    s_h = find_max(src,6);
    s_l = find_max(src,10);

    if(-1 == h_h || -1 == h_l || -1 == m_h || -1 == m_l || -1 == s_h || -1 == s_l)
        printf("invalid!\n\r");                         //調試用h_h=%d,h_l=%d,m_h=%d,m_l=%d,s_h=%d,s_l=%d\n",h_h,h_l,m_h,m_l,s_h,s_l);
    else
        printf("%d%d:%d%d:%d%d\n",h_h,h_l,m_h,m_l,s_h,s_l);
}

void main()
{
    int input[IN_BUF_SIZE];
    memset(input,-1,sizeof(input));

    printf("[Input format]:[0,1,2,3,4,5]\n\r");
    scanf("[%d,%d,%d,%d,%d,%d]",&input[0],&input[1],&input[2],&input[3],&input[4],&input[5]);
    find_max_time(input);
}

測試結果

注意事項

時間翻轉:24時翻轉爲0點。

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