华为的一个笔试题,大大多给点意见,看怎么做
#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"
};
用C语言编写函数,从g_time_tab 中找出最接近g_sleep_time的时间,并且printf 出结果。
[解决办法]
不知道题目是不是给定待查找的字符数组,我随机生成了一个.
不用排序也没用二分,直接每次计算差值都找一个最小的值,测试
了一下还可以.
#include "stdio.h"
#include "time.h"
#include "stdlib.h"
#define MAX 100
char a[MAX][5];
char s_target[]="22:50";
int main(){
srand(time(NULL));
for(int i=0;i<MAX;i++){
a[i][0]=rand()%3;
if(a[i][0]==2){
a[i][1]=rand()%5;
}
else a[i][1]=rand()%10;
a[i][2]=':';
a[i][3]=rand()%6;
a[i][4]=rand()%10;
}
for (int i=0;i<MAX;i++)
{
printf("%d",a[i][0]);
printf("%d",a[i][1]);
printf("%c",a[i][2]);
printf("%d",a[i][3]);
printf("%d",a[i][4]);
printf(" ");
if(i%10 == 0)printf("\n");
}
int second[MAX];
int target=s_target[0]*10*60+s_target[1]*60+s_target[3]*10+s_target[4];
int temp;
int order;
int out=2*10*60+4*60+5*10+9;
for(int i=0;i<MAX;i++){
temp=a[i][0]*10*60+a[i][1]*60+a[i][3]*10+a[i][4]-target;
if(out>temp)
{out=temp;
order=i;
}
}
printf("\n\n\nTarget is:\n");
printf("%d",a[order][0]);
printf("%d",a[order][1]);
printf("%c",a[order][2]);
printf("%d",a[order][3]);
printf("%d",a[order][4]);
getchar();
}
[解决办法]
#include <stdio.h>#define MAX_TAB_TIME 10#define ABS_VALUE(x) ((x)<0?(-(x)):(x))int distance = 0;char g_tab_time[MAX_TAB_TIME][6] = { "22:08", "08:31", "18:25", "21:35", "01:35", "23:45", "00:03", "09:34", "07:23", "14:31"};int str_to_time(char *p){ int hour = 0, minute = 0; char *tmp = p; int flag = 0; if (*tmp=='0') { flag = 1; tmp++; } while (*tmp!=':') { hour = hour*10 + *tmp++ - '0'; } tmp++; while (*tmp!='\0') { minute = minute*10 + *tmp++ - '0'; } return hour*60+minute+flag*24*60;}void main(){ char g_sleep_time[6] = {"21:30"}; int i = 0; int result; int target = 0; char *p; for (; i<MAX_TAB_TIME; i++) { result = str_to_time(g_sleep_time) - str_to_time(g_tab_time[i]); result = ABS_VALUE(result); if (i==0) { distance = result; } else { if (result<distance) { distance = result; target = i; } } } p = g_tab_time[target]; printf("the most closest time is: \n"); printf("%s\n",p);}