题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
代码
#include <iostream>
using namespace std;
//右上角查找法
bool Find(int *arr, int rows, int columns, int num)
{
bool found = false;
if(arr != NULL && rows > 0 && columns > 0 )
{
int row = 0;
int column = columns - 1;
while(row < rows && column >= 0)
{
if(arr[row * columns + column] == num)
{
found = true;
break;
}
else if(arr[row * columns + column] > num)
{
--column;
}
else
{
++row;
}
}
}
return found;
}
//左下角查找法
bool Find1(int *arr, int rows, int columns, int num)
{
bool found = false;
if(rows > 0 && columns > 0 && arr != NULL)
{
int column = 0;
int row = rows - 1;
while(row <= 0 && column < columns )
{
if(arr[row * columns + column] == num)
{
found = true;
break;
}
else if(arr[row * columns + column] > num)
{
--row;
}
else
{
++column;
}
}
}
return found;
}
int main()
{
int a[][4]={{1,2,8,9},{2,4,9,12},{4,7,10,14},{6,8,11,15}};
int r = sizeof(a) / sizeof(a[0]);
int c = sizeof(a[0]) / sizeof(int);
int n;
printf("请输入你想要查找的数字:\n");
cin >> n;
int ret;
ret = Find(a[0], r, c, n);
//ret = Find1(a[0], r, c, n);
if(ret)
{
cout << n << "找到!" << endl;
}
else
{
cout << n << "没找到!" << endl;
}
return 0;
}