题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解法:
1 #include<stdio.h> 2 /*
从矩阵的右上角开始寻找
*/
3 int Find(int *matrix, int rows, int columns, int number){ //看成一维数组进行查找,会减少查找次数 4 int found = 0; 5 6 if(matrix != NULL && rows > 0 && columns > 0){ 7 int row = 0; 8 int column = columns - 1; 9 while(row < rows && column >= 0){ 10 if(matrix[row * columns + column] == number) //该数字等于要查找的数字,则退出 11 { 12 found = 1; 13 break; 14 } 15 else if (matrix[row * columns + column] > number) //如果没找到且右上角的数字比目标数字大,则列减少 16 --column; 17 else 18 ++ row; //如果没找到且右上角的数字比目标数字小,则行增加 19 } 20 } 21 return found; //每次都找右上角(比较)这样每次都会减少一行或一列的比较 22 } 23 24 int main(){ 25 int Mat[10000]; 26 int rowS, columnS, Target; 27 28 while( scanf("%d%d",&rowS,&columnS) != EOF ){ //格式化输入 29 scanf("%d",&Target); 30 for( int i=0; i<rowS; i++){ 31 for( int j=0; j<columnS; j++){ 32 scanf("%d",&Mat[columnS*i+j]); //针对一维数组进行输入 33 } 34 } 35 if( Find(Mat, rowS, columnS, Target) ){ 36 printf("Yes "); 37 }else{ 38 printf("No "); 39 } 40 } 41 return 0; 42 }