最简单的方法是用二分法!我用的就是二分法。
把二维数组转化为一维数组,唯一的难点就是表示数组的行列下标。屏幕前的你忘记点赞啦!
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;
}
}