有一个数字矩阵,从左到右递增,从上到下递增,编程查找数字是否存在
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int xunzhao(int arr[10][10], int input)
{
int i;
int j;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (input == arr[i][j])
{
return 1;
}
}
}
return 0;
}
int main()
{
int arr[10][10] = { 0 };
int input = 0;
scanf("%d", &input);
int i = 0;
int j = 0;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
if (i == 0)
{
arr[i][j]=j+1;
}
else
{
arr[i][j] = arr[i - 1][j] + 1;
}
}
}
int ret=xunzhao(arr, input);
if (ret == 1)
{
printf("cunzai");
}
else
printf("bucunzai");
return 0;
}
上面展示的是暴力查找法,下面展示的代码的优点在于查找时长小于O(k)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include<string.h>
int xunzhao(int arr[3][3],int k)
{
int x = 0;
int y = 2;
while (x <= 2 && y >= 0)
{
if (arr[x][y] > k)
y--;
else if (arr[x][y] < k)
x++;
else
return 1;
}
}
int main()
{
int k = 0;
int arr[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
scanf("%d", &k);
int ret = xunzhao(arr, k);
if (ret == 1)
printf("存在");
else
printf("不存在");
return 0;
}