杨氏矩阵 :一个由上到下,由左到右依次递增的矩阵。

目的: 判断一个数是否在矩阵中。

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//int find_num1(int arr[3][3],int r,int c,int k)
//{
//    int x = 0;
//    int y = c - 1;
//    
//    while (x <= r && y>=0)
//    {
//        if (arr[x][y] < k)
//        {
//            x++;
//        }
//        else if (arr[x][y] > k)
//        {
//            y--;
//        }
//        else
//        {
//            //printf("%d %d\n",x,y); // 函数目标要清晰,不掺杂别的东西
//            return 1;
//        }
//    }
//    return 0;
//}


int find_num2(int arr[3][3], int * px, int * py,int k)
{
    int x = 0;
    int y = *py - 1;

    while (x <= *py  && y >= 0)
    {
        if (arr[x][y] < k)
        {
            x++;
        }
        else if (arr[x][y] > k)
        {
            y--;
        }
        else
        {
            *px = x;
            *py = y;
            return 1;
        }
    }

    return 0;
}
int main() 
{
        // 假如是下面这种矩阵的排列:
    //1 2 3
    //4 5 7
    //7 8 9  
    int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
    int k = 4;
    int x = 3;
    int y = 3;
    //设计一个函数,如果找到了就返回1,没找到返回0
    
    //int ret1 = find_num1(arr,3,3,k);
    //if (ret == 1)
    //{
    //    printf("找到了\n");
    //}
    //else 
    //{
    //    printf("没找到\n");
    //}


    int ret2 = find_num2(arr,&x,&y,k);
    if (ret2 == 1)
    {
        printf("找到了 下标:%d %d\n",x,y);

    }
    else 
    {
        printf("没找到\n");
    }
    return 0;
}