//2.
//有一个二维数组.----杨氏矩阵
//数组的每行从左到右是递增的,每列从上到下是递增的.
//在这样的数组中查找一个数字是否存在。
//时间复杂度小于O(N);
#include<stdio.h>
#include<windows.h>
#define ROW 3
#define COL 3
int judge(int arr[ROW][COL], int value);
int main()
{
int arr[ROW][COL] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0, j = 0;
int value = 0;
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
printf("%-5d", arr[i][j]);
}
printf("\n");
}
printf("please input a number:");
scanf_s("%d", &value);
if (judge(arr, value))
{
printf("%d is included.\n", value);
}
else
{
printf("%d is not included.\n", value);
}
system("pause");
return 0;
}
int judge(int arr[ROW][COL], int value)
{
int i = 0;
int j = COL - 1;
int temp = arr[i][j];
while (1)
{
if (value == temp)
{
return 1;
}
else if (temp < value&&j >= 0)
{
temp = arr[i][j++];
}
else if (temp>value&&i<=(ROW-1))
{
temp = arr[i++][j];
}
else
{
return 0;
}
}
}