剑指Offer:二维数组中的查找

  1. /********************************* 
  2. *   日期:2013-10-11 
  3. *   作者:SJF0115 
  4. *   题号: 九度OJ 题目1384:二维数组中的查找 
  5. *   来源:http://ac.jobdu.com/problem.php?pid=1384 
  6. *   结果:AC 
  7. *   来源:剑指Offer 
  8. *   总结: 
  9. **********************************/  
  10. #include<stdio.h>  
  11. #define N 1001  
  12.   
  13. int Matrix[N][N];  
  14.   
  15. int Find(int Matrix[N][N],int m,int n,int t){  
  16.     //从矩阵的右上角查起  
  17.     int row = 0;  
  18.     int col = n - 1;  
  19.     while(row < m && col >= 0){  
  20.         int number = Matrix[row][col];  
  21.         //如果该数字等于要查找的数据,查找过程结束  
  22.         if(number == t){  
  23.             return 1;  
  24.         }  
  25.         //如果该数字小于要查找的数据,查找的数据肯定在该数据的下方,即剔除这个数据所在的行  
  26.         else if(number < t){  
  27.             row++;  
  28.         }  
  29.         //如果该数字大于要查找的数据,查找的数据肯定在该数据的左方,即剔除这个数据所在的列  
  30.         else{  
  31.             col--;  
  32.         }  
  33.     }  
  34.     return 0;  
  35. }  
  36.   
  37. int main(){  
  38.     int m,n,t,i,j;  
  39.     while(scanf("%d %d",&m,&n) != EOF){  
  40.         scanf("%d",&t);  
  41.         //输入矩阵  
  42.         for(i = 0;i < m;i++){  
  43.             for(j = 0;j < n;j++){  
  44.                 scanf("%d",&Matrix[i][j]);  
  45.             }  
  46.         }  
  47.         //查找数据  
  48.         int result = Find(Matrix,m,n,t);  
  49.         if(result == 1){  
  50.             printf("Yes ");  
  51.         }  
  52.         else{  
  53.             printf("No ");  
  54.         }  
  55.     }  
  56.     return 0;  
  57. }  


【分析】







【第二种方法】

此题考查的主要是第一种方法的解题思路。

  1. #include<stdio.h>  
  2.   
  3. int main()  
  4. {     
  5.     int i,j,m,n,t,number,flag;  
  6.     while (scanf("%d %d",&m, &n) != EOF)  
  7.     {  
  8.         flag = 0;  
  9.         scanf("%d",&t);  
  10.         for(i = 0; i < m; i++)  
  11.             for(j = 0; j < n; j++)  
  12.             {  
  13.                 scanf("%d",&number);  
  14.                 if(t == number)  
  15.                 {     
  16.                     flag = 1;                                                    
  17.                 }  
  18.             }  
  19.         if(flag == 1)  
  20.         {  
  21.             printf("Yes ");  
  22.         }  
  23.         else  
  24.         {  
  25.             printf("No ");   
  26.         }  
  27.     }  
  28.     return 0;  
  29. }  

原文地址:https://www.cnblogs.com/baoendemao/p/3804711.html