【C++】二分查找(PTA)

  • Post author:
  • Post category:其他



题目要求


利用二分查找找出所给出的数在数组中的下标


输入格式:


第一行输入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 chazhao(int c[],int m,int n)
{
	int start = 0,end;//sizeof的值就为c[n]中的n,并不是c实际的数字个数 ,原因是数组作为参数传给函数时,是传给数组的地址,而不是传给整个的数组空间 
	//end = sizeof(c)/sizeof(int)-1;
	end=m-1;
	while(start<=end){
		int mid = (end + start)/2;
		if(n<c[mid]){
			end=mid-1;
		} 
		if(n>c[mid]){
			start=mid+1;
		}
		if(n==c[mid]){
			return mid;
		}
		
	}
	return 0;
}
int main(){
	int n,m;
	cin >> n >> m;
	int a[n],b[m],c[m];
	for(int i=0;i<n;i++){
		cin>>a[i];
	}
	for(int i=0;i<m;i++){
		cin>>b[i];
		c[i]=chazhao(a,n,b[i]);//数组直接为a就行了,不用a[] !
	}
	for(int i=0;i<m-1;i++){
		cout<<c[i]<<" ";
	}
	cout<<c[m-1];
} 

好久好久都没有写过博客了,嗯,如果要是算真正用心去写的话,这是第一次,之前都是复制题目然后答案,并没有用心写过。也是希望改变一下自己吧,今后会坚持去写一些心得和体会,也希望自己能够从这一点一滴的记录中得到成长和蜕变吧。

通过做这道题还是暴露出太多问题了,从最基本的语法问题,都已经忘得差不多了,本来C语言基础就不是特别好,现在做C++还是稍微有一点吃力的。虽然吃力,也要去努力学习去补上之前的坑,这怪不得别人,谁叫你之前没学好呢。请加油!!!

这是通过做这道题发现的问题,与君共勉

本来自定义函数为

int chazhao(int c[],int n)

,想法是通过sizeof求得数组c[]中的元素个数,但却发现并行不通,因为sizeof函数的含义为数组所占字节数,并不是实际数组中的元素个数,求数组中元素个数应该用

sizeof©/sizeof(int)-1

,通过总的字节数除以每个元素所占的字节数就是元素个数了

因为函数

chazhao

的返回值为整型,而return只在while语句中返回了mid,在提交的时候报错


warning: control reaches end of non-void function

,这是因为部分函数没有返回值,所以报错,于是在自定义函数最后放上了一个 return 0;问题完美解决。在有返回值函数中,无论最后的return是否能够用的上,一定要加上不能遗漏。

还有就是一个特别基础的问题了,在主函数中调用函数的时候,数组作为变量,是直接输入a就行了,不用输入方括号!!

做这个题一共用了我好几个钟,从昨天晚上10点开始到到十一点多,再到今天早起九点多(因为今天过星期,好久没有睡得这么爽了,又开心又舒服)到现在,这足以证明我是多么的菜了。请叫我小菜鸡!!!
在这里插入图片描述

虽然很菜,但当最后一溜

答案正确

的时候还是超级开心的,有图有真相

在这里插入图片描述

好,今天就先到这里了,我会继续坚持写博客的,而且是用心去写,加油。



版权声明:本文为weixin_46014378原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。