解题思路:可以用二分法查找解题,因为二分法查到最后刚好就是要替换的数,直接取他的下标就好
注意事项:最高的话,要单独拿出来解
参考代码:
#include<bits/stdc++.h> using namespace std; int main() { long long int n,m,mark,j; long long int x[200000]; cin>>n>>m; for(int i=0,flag=1;i<n;i++) { cin>>x[i]; if(flag&&x[i-1]>x[i])//找到队列最高的人 { mark=i-1; flag--; } } int expect; cin>>expect; if(m>x[mark])//新同学最高的情况 { cout<<mark+2<<endl; return 0; } int high,low,mid; if(expect==1)//左边 { high=mark; low=0; while(low<=high)//左边是从小到大排列 { mid=(low+high)>>1;//二进制一退位,相当于除以二 if(x[mid]<=m) { low=mid+1; } else { high=mid-1; } } } else if(expect==2)//右边 { low=mark;high=n-1; while(low<=high)//右边是从大到小排列 { mid=(low+high)>>1; if(x[mid]>=m) { low=mid+1; } else { high=mid-1; } } } cout<<low+1<<endl;//因为数组下标是从0开始,所以加一 return 0; }
0.0分
1 人评分
C语言训练-斐波纳契数列 (C语言代码)浏览:1174 |
小明A+B (C语言代码)浏览:1256 |
幸运数 (C++代码)浏览:1265 |
循环入门练习5 (C语言代码)浏览:839 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:683 |
1071题解浏览:493 |
1051(奇了怪了)浏览:650 |
C二级辅导-阶乘数列 (C语言代码)浏览:522 |
字符逆序 (C语言代码)浏览:621 |
剪刀石头布 (C语言代码)浏览:1436 |