/********************************* * 日期: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; }