首页 > 试题广场 > 程序的输出为( )
[单选题]
#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
这个题目的程序也太长了吧,这不是道选择题嘛
发表于 2019-08-24 16:19:51 回复(0)

右移一位,就是300÷2=150,所以mid1=150,mid2=225,最终结果就是150×150和225×75的比较,显然是后者大,所以l=mid1=150


发表于 2019-10-22 23:07:26 回复(0)
#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;
}
移位操作,应该有规律的,让有缘人去递推吧,我直接丢编译器了。
-----C
发表于 2019-10-07 20:31:13 回复(0)