九度1348



#include "iostream"
using namespace std;

int main(int argc, char *argv[])
{
 int m , n;
 int t;
 cin >> m >> n;
 while (m != 0 && n != 0)
 { 
  cin >> t;
  int array[m][n];
  bool flag = false;
  for(int i = 0; i < m; i++) 
   for( int j = 0; j < n; j++)
    {
     cin >> array[i][j];
    }
 
  if(array[0][0] == t)
   {
    flag = true;
   }
  else
   {
    int rr = 1;
    for(rr;rr < m; rr++)
    {
     if(array[rr][0] == t)
     {
      flag = true;
     }
     else if(array[rr-1][0] < t && array[rr][0] > t)
     {
      int j = 1;
      
      for( j;j < n;j++)
      {
       if(array[rr-1][j] == t)
       {
        flag = true;
       }
      }
     
     }
    }
    
   }
   
  if(flag == true)
   cout << "Yes";
  else
   cout << "No";
  cin >> m >> n;
 }
 return 0;
}


思路:

考虑到矩阵每行从左至右递增,每列从上至下递增,假设需要查找的变量为t,则t可以先和左下角元素比较,设左下角元素为arr[row-1][0]。

若t > arr[row-1][0],则t只能和arr[row-1][0]右边的元素比较,即比较t与arr[row-1][1],若t < arr[row-1][0],则t只能与arr[row-1][0]上面的元素比较,即比较arr[row-2][0]。

以此类推,直至找到t,或者走出矩阵。


细节:

第1行,保含内置头文件一般用尖括号。

第6行,变量名尽量表意,这里可以写int row, col;

第12行,可以在循环外预先定义一个大数组,每次循环都定义数组效率比较低。如const int MAXN = 10000;int array[MAXN][MAXN];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值