题目描述:
vector数组的做法:
分析方法:
选取右上角的数字9。开始遍历,目标数字比所遍历的小,就往左走;目标数字比所遍历的大,就往下走;
如果目标数据跟所遍历到的数据相等就说明找到了。
代码:
【写代码的时候突然发现自己不会二维数组传参了.......kepa 就写个小小程序测试了一下】
测试二维数组传参的!!!
#include<iostream>
using namespace std;
void fun(int x[][3])
{
int i, j;
for (i = 0; i < 2; i++)
{
for (j = 0; j < 3; j++)
{
cout<< x[i][j];
}
cout<<endl;
}
}
int main()
{
int a[2][3] = {1, 2, 3, 4, 5, 6};
fun(a);
return 0;
}
普通数组的做法:
#include<iostream>
using namespace std;
bool Find_num(int *matrix , int rows, int colums,int number)
{
bool find = false;
if(matrix != NULL && rows > 0 && colums > 0)
{
int row = 0;
int colum = colums - 1;
while(row < rows && colum >= 0)
{
if(matrix[row*colums+colum] == number) //觉得特别好的一种方法
{
find = true;
break;
}
else if(matrix[row * colums + colum] > number)
-- colum;
else
++row;
}
}
return find;
}
int main()
{
int numBoard[4][4]= {1,2,8,9,2,4,9,12,4,7,10,13,6,8,11,15};
int find_num;
cin>>find_num;
if(Find_num((int*)numBoard,4,4,find_num)) //这种强转的操作二维数组也可以
cout<<"find it"<<endl;
else
cout<<"sorry "<<endl;
}
vector数组的做法:
{从左下角开始的}
#include<iostream>
#include<vector>
using namespace std;
void print(vector<vector<int> > array)
{
for(int i = 0;i < array.size();++i)
{
for(int j = 0;j < array[0].size();++j)
{
cout<<array[i][j]<<" ";
}
cout<<endl;
}
}
bool _Find(int target, vector<vector<int> > array)
{
int row_star,colum_star,row_end,colum_end;
bool find = false;
/*从左下角开始*/
row_star = array.size()-1;//行
colum_star = 0;//列
row_end = 0;
colum_end = array[0].size()-1;
int i = row_star;
int j = colum_star;
while((i>=row_end)&&(j<colum_end)) {
if(target > array[i][j])
--i;
if(target < array[i][j])
++j;
if(target == array[i][j])
{
find = true;
break;
}
}
return find;
}
int main()
{
int count = 0;
int target;
vector<vector<int> > array(3);
for(int i=0;i<3;++i)
{
array[i].resize(3);
}
for(int k=0;k<3;++k)
{
for(int j=0;j<3;++j)
{
array[k][j] = ++count;
}
}
print(array);
cin>>target;
bool m = _Find(target, array);
if(m)
{
cout<<"find it"<<endl;
}
else
{
cout<<"sorry "<<endl;
}
return 0;
}