TA的每日心情 | 郁闷 2015-5-7 22:59 |
---|
签到天数: 129 天 [LV.7]常住居民III
滴水大师
 
- 积分
- 2717
|
本帖最后由 牛郎 于 2014-5-22 03:53 编辑
实现了 楼主的要求 :D:D 可能不是最简化 但是可以作为参考
#include "stdafx.h"
#include "stdio.h"
//题目: 用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","00:01","00:15","17:20","05:09","08:59","13:20","09:45","20:17","23:23","14:08","01:59","16:40","23:00","21:31"};//二维数组"13:46"
char g_sleep_time[6] = {"21:30"};//依据数据
//解题思路
//首先知道了需要寻找的值 既然是靠近 那么就采取用这个数减去需要寻找的值 取差值最小的 负数需要变正
//这就需要处理时间变化为我们所认识的阿拉伯数
//首先把需要找的数据转换
int fun_time(char time[])//时间转换整数
{
int Num3;
int Num2;
int Num1;
int Num;
Num = 0;
Num1 = 0;
Num2 = 0;
Num3 = 0;
if (time[0]!=0)
{
Num3 = (time[0]-48)*1000;
Num2 = (time[1]-48)*100;
Num1 = (time[3]-48)*10;
Num = Num3 + Num2 + Num1 + (time[4]-48);
}
return Num;
}
int main(int argc, char* argv[])
{
int time;
int Findtime;
int i;
int j;
int k = 0;
int m = 0;
int Num[245];
int Num1[245];
int tmp0;
time = fun_time(g_sleep_time);//依据值
for (i = 0;i < 245;i++)//一维245时间个数 //二维6 是成员
{
Findtime = fun_time(g_time_tab);
if (Findtime == 0)
{
// 时间是00:00
Findtime = 2400;
Num【i】 = time -Findtime;//保存所有时间
}
else
{
Num【i】 = time -Findtime;//保存所有时间
}
}
//求出了差值 那么其中的差值肯定有正数负数
//那么就分成两部来比较 负数与负数比较,正数与整数比较
for(i = 0;i < 245;i++)
{
if (Num【i】 > 0)
{
Num1[k] = Num【i】;
k++;
}
else
{
Num1[244-m] = Num【i】;
m++;
}
}
//比较正数 整数求出最小
for (i = 0;i < k;i++)
{
for (j = i + 1;j < k;j++)
{
if (Num1【i】 > Num1[j]) //这个地方发帖会被省略 只能这样写 自己改一下
{
tmp0 = Num1【i】;
Num1【i】 = Num1[j];
Num1[j] = tmp0;
}
}
}
// printf("正数最小 %d\n",Num1[0]);
//比较负数 负数求出最大
for (i = k;i < 245;i++)
{
for (j = i + 1;j < 245;j++)
{
if (Num1【i】 < Num1[j])
{
tmp0 = Num1【i】;
Num1【i】 = Num1[j];
Num1[j] = tmp0;
}
}
}
// printf("负数最大 %d\n",Num1[k]);
//求出最小正数 和最大负数
//最后一步比较这两个数的大小
if(Num1[0] > -Num1[k])
{
//最终时间 最接近
time = time - Num1[k];
}
else
{
//最终时间最接近
time = time - Num1[0];
}
printf("最接近的时间:%d\n",time);
return 0;
}
|
|