一天有N个班次 (1<=N<=8)
假设为3个班次 比如 日期 2009-6-12
班次1 2009-6-12 8:30- 2009-6-12 11:30
班次2 2009-6-12 13:30-2009-6-12 17:30
班次3 2009-6-12 19:00-2009-6-12 21:00
传入一个时间点,必须是2009-6-12 内的
有无简便的算法 可以快速判断与这个时间点 最近的班次
比如:
2009-6-12 8:20 那么对应的班次是 班次1
2009-6-12 16:30 对应的班次是 班次2
2009-6-12 18:51:14 对应的班次是 班次3
如果你是要将数据读取出来再比对的话,可以分别将三个班次的时间的.Ticks属性减去传入时间的.Ticks属性,比较得出结果的绝对值,绝对值最小的就是最邻近的班次。
如果你需要在数据库内直接比对,那建议改一下数据表结构,为其增加一个长整型字段,存入班次时间的.Ticks属性,然后再进行比对。
注:.Ticks属性是DateTime对象所拥有的
我用c++写的代码,用的是字符串的处理
希望得到修正
#include<iostream>
#include<string>
using namespace std;
int main(){
string s,str;
int hour,min,i;
while(getline(cin,s)){
i=9;
while(s[i]==' ') i++;
hour=s[i++]-'0';
if(s[i]!=':'){
hour=hour*10+(s[i++]-'0');
}
i++;
min=(s[i]-'0')*10+(s[i+1]-'0');
cout<<hour<<" "<<min<<endl;
if(hour<=11){
if(hour==11&&min>30) {
cout<<"第二班"<<endl;
}
else
cout<<"第一班"<<endl;
}
else if(hour<=17){
if(hour==17&&min>30)
cout<<"第三班"<<endl;
else
cout<<"第二班"<<endl;
}
else if(hour<=21){
if(hour==21&&min>0)
cout<<"无此班车"<<endl;
else
cout<<"第三班"<<endl;
}
}
system("pause");
return 0;
}