问题背景
今天在做算法题的时候发现问题,题目如下:
利用二分查找找出所给出的数在数组中的下标
输入格式:
第一行输入n和m表示数组有n个数据,m表示要对m个数进行查找
输出格式:
所有输出在一行完成,行末没有多余空格和多余回车。
输入样例:
5 5
1 2 3 4 5
1 2 3 4 5输出样例:
0 1 2 3 4
代码:
#include<iostream>
using namespace std;
int num[1000005];
int binarySearch(int begin,int end,int target){
while(begin<end){
int mid = (begin+end)/2;
if(num[mid]==target) return mid;
else if(num[mid]<target) begin = mid+1;
else end = mid-1;
}return end;
}
int main(){
int a,b;
scanf("%d %d",&a,&b);
for(int i=0;i<a;i++)scanf("%d",&num[i]);
for(int i=0;i<b;i++){
scanf("%d",&a);
if(i>0)printf(" ");
printf("%d",binarySearch(0,b-1,a));
}return 0;
}
问题发现
一共两处for循环
以前的我认为用for循环输入的时候,输入一次,按一次回车键
像这个第二个for循环输出的时候,应该是输入一个数,输出一个数,并不能达到题目所要求的输入一行,输出一行
但是实际上是可以的,我在调试程序的时候发现,第二次for循环输入的时候,连续输入五个数,a的值先是1,然后执行完一次,自动变成2,再运行一次,变成3,依次进行…🤦♂️
先写这些吧,等我以后学透了再补充,也希望大佬能指点一下。