已经生成19个0~9999间的随机数a1、a2、……a19(已按大小排序),将0~9999随机划分为不均匀的20个区间,[0,a1),[a1,a2),……,[a19,10000).
求一个算法,实现输入一个数,判断该数落在哪一个区间中?
希望:
耗时尽量少;
c90要求语句嵌套不高于15个(比如if(){}else if(){}else if(){}……else if(){}else{}这样的分支不能超过15个);
第1个回答 2015-10-26
吧0(a0), a1~a19放到数组中, 然后循环判断就行了
for(int i=0; i<19 i++)
{
if(number>=a[i] && number<=a[i+1])
{
cout<<"Range Num: "<< i+1;
break;
}
}追问
for(int i=0; i<19 i++)
{
if(number>=a[i] && number<=a[i+1])
{
cout<<"Range Num: "<< i+1;
break;
}
}追问
谢谢!我也只想到这样。
还想请问一下如果区间是均分的,怎么能快一点,二分法吗?还有别的写法吗?
平均分配的话只要做个除法就行了, 比如平均分成20个区间, 就把输入的数与20做整除运算,然后结果+1 就行了, 不用二分法
本回答被提问者采纳