首页 新闻 会员 周边

查找最近的班次算法

0
悬赏园豆:5 [已解决问题] 解决于 2009-06-13 11:54

一天有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

hekai的主页 hekai | 初学一级 | 园豆:85
提问于:2009-06-12 18:53
< >
分享
最佳答案
0

如果你是要将数据读取出来再比对的话,可以分别将三个班次的时间的.Ticks属性减去传入时间的.Ticks属性,比较得出结果的绝对值,绝对值最小的就是最邻近的班次。

如果你需要在数据库内直接比对,那建议改一下数据表结构,为其增加一个长整型字段,存入班次时间的.Ticks属性,然后再进行比对。

注:.Ticks属性是DateTime对象所拥有的

斯克迪亚 | 老鸟四级 |园豆:4124 | 2009-06-12 19:39
其他回答(1)
0

我用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;
    }

zidane | 园豆:205 (菜鸟二级) | 2009-06-12 19:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册