竞赛
考级
Tian
AC
#include<bits/stdc++.h> using namespace std; int n; int a[1000005]; int ans = -1; void dfs(int l,int r, int x){ if(l>r) return ; int mid = (l+r) >> 1; if(a[mid] >= x){ ans = mid; dfs(1,mid-1,x); } else{ dfs(mid+1,r,x); } return ; } int main(){ cin >> n; for(int i = 1; i <= n ; i ++){ cin >> a[i]; } int x; cin >> x; dfs(1,n,x); if(a[ans] == x)cout << ans; else cout << -1; return 0; }
c++
#include<iostream> using namespace std; int main(){ int a[100]; int n,x; cin >> n; for (int i = 1; i <= n; ++i) { cin >> a[i]; } cin >> x; for (int i = 1; i <= n; ++i) { if (a[i] == x) { cout << i; return 0; } } cout << -1; return 0; }
ZDZL_祸津御建鸣神命
突击手绫地宁宁
#include<bits/stdc++.h> using namespace std; int main(){ int a[10005]; int n, x, flag = 0; cin >> n; for(int i = 1;i <= n;i++){ cin >> a[i]; } cin >> x; for(int i = 1;i <= n;i++){ if(a[i] == x){ flag = 1; cout << i; break; } } if(flag == 0){ cout << -1; } return 0; }
俞康杰
根据题面描述及题目标签,这是一道很明显的二分查找题,虽然algorithm头文件中也有函数,但手写模板更有感觉。由于题目已经排过序了,且0<n<=1000<n<=1000<n<=100,可以直接开始做。
闪电九尾狐
#include<bits/stdc++.h> using namespace std; int n,c; int a[100005][3]; int main(){ int n,m,o; cin>>n; }
夏亚.阿兹纳布尔【ddxdd】
//查找x #include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N]; int main(){ int n;//n个数 cin>>n; for(int i=1;i<=n;i++){ cin>>a[i];//循环存入数组 } int x;//查找的目标数字 cin>>x; int l=1,r=n; while(l<=r){ int mid=(l+r)/2; if(a[mid]==x){ cout<<mid; return 0; }else if(a[mid]>=x){ r=mid-1; }else{ l=mid+1; } } cout<<-1; return 0; }
༺དༀ༒fish大帝༒ༀཌ༻
#include<iostream> using namespace std; int a[105]; int main(){ int n,l=1,x; cin>>n; int r=n; for(int i=1;i<=n;i++){ cin>>a[i]; } cin>>x; while(l<r){ int m=(l+r+1)/2; if(a[m]==x){ cout<<m; return 0; }else if(a[m]<x){ l=m+1; }else{ r=m; } } cout<<-1; }
皮皮虾acgo粉
#include<bits/stdc++.h> using namespace std; int n,mid,l,r,sum,a[1000010],x; int main(){ cin>>n; for(int i=1;i<=n;i+=1){ cin>>a[i]; } cin>>x; l=1; r=n; while(l<=r){ mid=(l+r)/2; if(a[mid]>x){ r=mid-1; } else if(a[mid]<x){ l=mid+1; } else{ cout<<mid; return 0; } } cout<<-1; }
魏敬平
不会用二分查找,但是仍然通过了。 n = int(input()) a = input().split() x = input() _ = 0 for i in a: _ += 1 if i == x: print(_) break else: print(-1)
徐面包是小笼包
zsy
#include<bits/stdc++.h> using namespace std; int a[105],n,l,r,mid,b; int main(){ cin>>n; for(int i=1;i<=n;i++) { cin>>a[i]; } cin>>b; r=n,l=1; for(int i=1;i<=n;i++) { mid=(r+l)/2; if(a[mid]>=b)r=mid+1; else l=mid-1; if(l>r)break; } if(a[mid]==b)cout<<mid; else cout<<-1; }
182****3301
枫岚
#include<bits/stdc++.h>//万能头文件 using namespace std;//命名空间 int n,L,R,mid,a[105],x;//定义变量 int main(){//主函数 cin>>n;//输入n for(int i=1;i<=n;i++){ cin>>a[i];//循环输入数组 } cin>>x;//输入x L=1,R=n;//赋值L,R while(L<=R){//条件L<=R mid=(L+R)/2;//算出中间值,公式:mid=(L+R)/2 if(a[mid]==x){//如果中间数字相等,输出下标,return cout<<mid; return 0; } else if(a[mid]<x){//由于是升序数列,如果中间数字<x,那么L=mid+1 L=mid+1; } else if(a[mid]>x){//如果中间数字>x,那么R=mid-1 R=mid-1; } } cout<<"-1";//如果没有数字=x,那么输出-1 return 0; }
shenzhangzheng
共57条
提交答案之后,这里将显示提交结果~