一半灵感来自于小学信息老师做的猜数字游戏
2024-07-25 19:37:25
发布于:广东
44阅读
0回复
0点赞
(以下代码使用函数)
先设置三个变量,分别代表首与尾和猜的值,猜的值/2取整,如果大了,首项变成当前猜的数,如果小了,尾项变成当前猜的数:
int find(int x){
int l=1,r=n+1;
while(l<r){
int mid=l+((r-l)>>1);
if(a[mid]>=x){
r=mid;
}
else{
l=mid+1;
}
}
if(a[l]==x){
return l;
}
else{
return -1;
}
}
完整代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1000010;
int a[maxn],n,m,q;
int find(int x){
int l=1,r=n+1;
while(l<r){
int mid=l+((r-l)>>1);
if(a[mid]>=x){
r=mid;
}
else{
l=mid+1;
}
}
if(a[l]==x){
return l;
}
else{
return -1;
}
}
int main(){
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>q;
int ans=find(q);
printf("%d ",ans);
}
return 0;
}
全部评论 1
大佬,第一段
int
写成了
nt
2024-07-25 来自 浙江
0
有帮助,赞一个