首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

华为的一个笔试题,大大多给点意见,看如何做

2012-06-12 
华为的一个笔试题,大大多给点意见,看怎么做#define TIME_TAB_MAX 245char g_time_tab[TIME_TAB_MAX ][6]

华为的一个笔试题,大大多给点意见,看怎么做
#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();

}
[解决办法]

C/C++ code
#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);} 

热点排行