/*********************************
* 日期:2013-10-11
* 作者:SJF0115
* 题号: 九度OJ 题目1384:二维数组中的查找
* 来源:http://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;
}