首页 > 试题广场 >

程序的输出为( )

[单选题]
#include<bits/stdc++.h>
using namespace std;
int n = 300;
int solve(int x){
return x * (n - x);
}
int main(){
int l = 1, r = n;
int mid1, mid2;
int t = 50;
while(t--){
mid1 = l + r >> 1;
mid2 = mid1 + r >> 1;
if(solve(mid1) > solve(mid2)){
r = mid2;
}
else{
l = mid1;
}
}
cout<< l <<endl;
return 0;
}

程序的输出为(        )
  • 1
  • 100
  • 150
  • 300
这就是一个二分法求中间值的代码,注意solve函数在x等于n/2时取最大,所以solve(mid1) > solve(mid2)这句判断就是在说mid1离中点n/2更近,而mid2远一点,这时把r置为mid2,也就是说,大于mid2的值不需要再考虑了,因为前面mid2跟mid1比已经输了,所以之后的就更不用比了,所以r=mid2,同理L=mid1也是这么来的。所以选C。,需要注意的是+号优先级大于移位处理号。所以其实就是/2。
发表于 2019-09-03 18:51:49 回复(0)
这种题目压根不想看。。。
发表于 2019-08-18 21:06:14 回复(0)
这个题是什么经典算法吗,碰见好几次了
发表于 2019-08-30 19:37:41 回复(0)