现有三个区间[1-15],[16-30]和[31-45]
当我给一个值为8的int变量,我要计算出它在第一个区间里,返回1
给值为17的int变量返回2
以此类推我有一个想法,比如共有一万个区间,我给定一个值,首先从中间的那个区间开始计算,如果小于的话就从起始的区间到中间的那个区间再折半查,以此类推,最终就能找到它属于的那个区间段,但我觉得这不是好的方法,有没有比较合适的计算方法啊请高手们指点,说一下大概的思路,别写代码,谢谢了

解决方案 »

  1.   

    for (j=1;j<10000; j++)
      {if (i<15*j)  
         {return  j;
               break;}
          
       }
      

  2.   

    int i = 8;
    int r = i/15 +1;i = 17;
    r = i/15 +1;
      

  3.   

    for (j=0;j<=10000;j++)
    {
       if(i<=15*j)
        {return j;
           break;}
    }
      

  4.   

    如果区间有规律就可以直接用除法得到整数就可以了,如果区间没有规律并且由小到大排列就用折半查找法。
    int[2,10000] area={..........................}
    public search(int n, int start,int end){
       int tem = (start+end)/2;
       if(n>=area[0,tmp] && n<=[1,tmp]){
          return tmp;
       } else {
          if(n<area[0,tmp]) end=tmp-1;
          else if(n>area[1,tmp]) start=tmp+1;
          return search(n, start, end);
       }
    }search(100, 0, 10000)如果区间是没规律又没有固定排序,就只能遍历搜索。活则做一个影射排列,再按折半查找。这些数据结构有很多效率高的查找方法
      

  5.   

    刚想起一件事来,
    ------------------
    int i = 8;
    int r = i/15 +1;i = 17;
    r = i/15 +1;
    -------------------
    不完全对的,当i=15、30、45、…………时,就错了。改正方法:r = (i+14)/15;