/*
用C语言编写函数,从g_time_tab 中找出最接近g_sleep_time的时间,并且printf 出结果。
#define TIME_TAB_MAX 245
char g_time_tab[TIME_TAB_MAX ][6] = {
"13:46",
"08:23",
"23:12",
"05:59",
...
"09:13",
"12:00",
"02:42",
"22:29",
...
...
};
char g_sleep_time[6] = {
"21:30"
};
*/
//思路:将时间转换为以分钟为单位的整数。然后遍历一遍数组,取出与目标时间差值最小的一个打印出来。
#include <stdio.h>
#define TIME_TAB_MAX 245
char g_time_tab[TIME_TAB_MAX ][6] = {
"13:46",
"21:29",
"08:23",
"23:12",
"05:59",
"21:13",
"12:00",
"02:42",
"22:29",
};
char g_sleep_time[6] = {
"21:30"
};
//时间转整数
int xf_atoi(char* p)
{
int iTime = 0;
iTime = ((p[0]-'0')*10+(p[1]-'0'))*60 + (p[3]-'0')*10+(p[4]-'0');
return iTime;
}
//遍历一遍数组,取出差值最小的一个。
int xf_GetNearestIndex()
{
int i = 0;
int NearestIndex = 0;
int tempNearest = 0;
int tempNext = 0;
int temp3 = xf_atoi(g_sleep_time);
for(;i<TIME_TAB_MAX && g_time_tab[i][2]==':';++i)
{
tempNearest = xf_atoi(g_time_tab[NearestIndex]);
tempNext = xf_atoi(g_time_tab[i]);
if(tempNearest<=temp3 && tempNext <= temp3 )
{
if(temp3-tempNearest>=temp3-tempNext)
{
NearestIndex = i;
}
}
else if( tempNearest>=temp3 && tempNext >= temp3 )
{
if(tempNearest-temp3>=tempNext-temp3)
{
NearestIndex = i;
}
}
else if( tempNearest>=temp3 && tempNext <= temp3 )
{
if(tempNearest-temp3>=temp3-tempNext)
{
NearestIndex = i;
}
}
else if(tempNearest<=temp3 && tempNext >= temp3)
{
if(temp3-tempNearest>=tempNext-temp3)
{
NearestIndex = i;
}
}
}
return NearestIndex;
}
int main(int argc,char** argv)
{
int nearestIndex = xf_GetNearestIndex();
printf("目标时间是:%s\n,与之最接近的时间是:%s\n",g_sleep_time,g_time_tab[nearestIndex]);
return 0;
}