题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下也是递增的,请编写一个程序在这样的矩阵中查找莫个数字是否存在.
1 2 3
3 4 5
6 7 8
--------------------------
1 2 3
2 3 4
3 4 5
一:以最右上方一个数为标准(3),当要查找的数大于(3)时,则找的数不可能在数字(3)这一行,行++。当要查找的数小于(5)时,则要找的数不可能在数字(5)这一列,所以列++;
二:以最左下方一个数为标准(6),当要查找的数大于(6)时,则找的数不可能在数字(3)这一列,列++。当要查找的数小于(5)时,则要找的数不可能在数字(5)这一行,所以行++;
#include<stdio.h>
int Find_Num(int a[3][3], int k, int* px, int* py ){ //找到返回1和下标,找不到返回0
int x=0;
int y=*py-1 ;
while(x <= *px-1 && y >= 0){
if(a[x][y] > k)
y--; // 列++
else if(a[x][y] < k)
x++; // 行++
else{
*px = x; //将当前的x,y重新赋值个px,py,这时的px,py就是要找的数的下标
*py = y;
return 1;
}
}
return 0;
}
int main(){
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int k = 0;
printf("请输入要寻找的数:\n");
scanf("%d",&k);
int x=3, y=3;
//返回型参数
int ret = Find_Num(a,k,&x,&y);
if(ret == 1)
printf("找到了下标为:%d %d\n",x,y);
else
printf("找不到\n");
return 0;
}