题目分析:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
3 3 5 1 2 3 4 5 6 7 8 9存在
查找过程:首先选取右上角,如果相等退出,如果小于剔除正行,row++,如果大于剔除整列,col--
#include<iostream>
using namespace std;
bool Find(int*matrix,int rows,int columns,int number)
{
if(matrix != NULL && rows > 0 && columns > 0)
{
int row = 0;
int column = columns - 1;
while(row < rows && column >= 0)
{
if(matrix[row * columns + column] == number)
{
return true;
break;
}
//如果第一行最后一列的数大于number,说明这一列都大于number则剔除这一列
else if(matrix[row * columns + column] > number)
-- column;
//如果第一行最后一列的数小于number,说明这行都小于number,则剔除这一行
else if(matrix[row * columns + column] < number)
++ row;
}
}
return false;
}
int main()
{
int row = 0,col = 0,num = 0;
int a[100] = {0};
cout << " 输入行数、列数和要查找的数:" << endl;
cin >> row >> col >> num;
cout << " 输入 " << row << "行" << col << "列递增数字" << endl;
for(int i = 0; i < row; i++)
{
for(int j = 0; j < col; j++)
cin >> a[i*col + j];
}
if(Find(a, row, col, num) == true)
cout << "存在"<< endl;
else
cout << "不存在" << endl;
system("pause");
return 0;
}
动态申请二维数组的
#include"stdafx.h"
#include<iostream>
using namespace std;
bool findN(int**arr,int n,int rows,int cols)
{
bool Find = false;
if(arr!=NULL && rows>0 &&cols>0)
{
int row = 0;
int col = cols-1;
while(row<rows && col>=0)
{
if(arr[row][col] == n)
{
Find = true;
return Find;
break;
}
else if(arr[row][col] > n)
col--;
else
row++;
}
}
return Find;
}
int _tmain(int argc, _TCHAR* argv[])
{
int row ,col;
cin>>row>>col;
cin.clear();
/**************创建二维动态数组***************/
int **arr;//定义二维数组指针
arr = new int*[row];
for(int i=0;i<row;i++)
{
arr[i]=new int[col];
}
/*****************输入值*******************/
cout <<"输入数组的值" << endl;
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
cin >> arr[i][j];
}
cout << endl;
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
cout<< arr[i][j] << '\t';
}
cout << endl;
}
//输入num
int num;
cout <<"输入要查找的值"<< endl;
cin>>num;
cout <<FindNum(arr,3,3,num) << endl;
for(int i=0;i<row;i++)
delete [] arr[i];
delete [] arr;
system("pause");
return 0;
}