0
点赞
收藏
分享

微信扫一扫

搜索二维数组(C/C++实现)

嚯霍嚯 2022-05-02 阅读 91

最简单的方法是用二分法!我用的就是二分法。

把二维数组转化为一维数组,唯一的难点就是表示数组的行列下标。屏幕前的你忘记点赞啦!

C:

#include<stdio.h>
int main(){
	int i,j,m,n,target;
	scanf("%d%d%d",&m,&n,&target);
	int a[m][n];
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
			scanf("%d",&a[i][j]);
		}
	}	
	int low=0,high=m*n-1;
	while(low<=high){
		int mid=low+(high-low)/2;
		int x=a[mid/n][mid%n];//该题的主要难点!表示行列。
		if(x==target){
		printf("true");break;	
		}
		else if(x>target){
			high=mid-1;
		}else{
			low=mid+1;
		}
		if(low>high)
		printf("false");
	}
}

C++:

#include<iostream>
using namespace std;
int main(){
	int i,j,m,n,target;
	cin>>m>>n>>target;
	int a[m][n];
	for(i=0;i<m;i++){
		for(j=0;j<n;j++){
		cin>>a[i][j];
		}
	}	
	int low=0,high=m*n-1;
	while(low<=high){
		int mid=low+(high-low)/2;
		int x=a[mid/n][mid%n];//该题的主要难点!表示行列。
		if(x==target){
		cout<<"true"<<endl;break;	
		}
		else if(x>target){
			high=mid-1;
		}else{
			low=mid+1;
		}
		if(low>high)
		cout<<"false"<<endl;
	}
}
举报

相关推荐

0 条评论