劍指Offer之1384:二維數組中的查找
/*********************************
* 日期:2013-10-11
* 作者:SJF0115
* 題號: 九度OJ 題目1384:二維數組中的查找
* 來源:https://ac.jobdu.com/problem.php?pid=1384
* 結果:AC
* 來源:劍指Offer
* 總結:
**********************************/
#include<stdio.h>
#define N 1001
int Matrix[N][N];
int Find(int Matrix[N][N],int m,int n,int t){
//從矩陣的右上角查起
int row = 0;
int col = n - 1;
while(row < m && col >= 0){
int number = Matrix[row][col];
//如果該數字等於要查找的數據,查找過程結束
if(number == t){
return 1;
}
//如果該數字小於要查找的數據,查找的數據肯定在該數據的下方,即剔除這個數據所在的行
else if(number < t){
row++;
}
//如果該數字大於要查找的數據,查找的數據肯定在該數據的左方,即剔除這個數據所在的列
else{
col--;
}
}
return 0;
}
int main(){
int m,n,t,i,j;
while(scanf("%d %d",&m,&n) != EOF){
scanf("%d",&t);
//輸入矩陣
for(i = 0;i < m;i++){
for(j = 0;j < n;j++){
scanf("%d",&Matrix[i][j]);
}
}
//查找數據
int result = Find(Matrix,m,n,t);
if(result == 1){
printf("Yes\n");
}
else{
printf("No\n");
}
}
return 0;
}
【分析】





【第二種方法】
此題考查的主要是第一種方法的解題思路。
#include<stdio.h>
int main()
{
int i,j,m,n,t,number,flag;
while (scanf("%d %d",&m, &n) != EOF)
{
flag = 0;
scanf("%d",&t);
for(i = 0; i < m; i++)
for(j = 0; j < n; j++)
{
scanf("%d",&number);
if(t == number)
{
flag = 1;
}
}
if(flag == 1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}
最後更新:2017-04-03 14:53:40