vs2010測試通過,代碼如下:
/**
*解題思路:
* 題目中給出的二維數組是:從左到右,從上到下依次遞增,
可以從行的最大值 列的最小值 或是 行的最小值 列的最大值 開始查找,
如果該值大于要查找的數字,則該數值所在的列可以排除,
如果該數值小于要查找的數字,則該數值所在的行可以排除,
依次縮小查找的範圍,最終得出結果
*以下代碼是從行的最大值 列的最小值 開始查找的(即二維數字的右上角的數字)
*/
#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#define ROWS 4
#define COLUMNS 4
bool findNumber(int *matrix ,int rows,int columns ,int number);
int _tmain(int argc, _TCHAR* argv[]){
int arr[ROWS][COLUMNS] ={{1,3,6,9},
{2,5,9,11},
{3,7,10,13},
{4,9,14,22}};
bool isfound;
int *matrix = &arr[0][0] ;
isfound = findNumber(matrix,ROWS,COLUMNS,7);
if(isfound){
printf("查找成功!");
system("pause");
return true;
}
printf("查找失敗!");
system("pause");
return false;
}
bool findNumber(int *matrix ,int rows , int columns, int number){
bool found = false ;
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){
found = true;
break;
}else if(matrix[row*columns + column] > number){
--column;
}else{
++row;
}
}
}
return found;
}