题目描述
* 题目描述:给定一个数组,里面有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点。