题目解析部分
题目中说的这个数组使我们所熟知的杨氏矩阵
拿到一道题的解题思路应该是这样的:先看这道题中所用到的知识点,然后选用合适的类型和返回类型。先用伪代码来将整体思路屡清楚,再用代码去代替
伪代码部分
假设这个要找的整数为falg
- 找到矩阵的右上角的值与falg进行比较
- 如果比falg小,说明该行整数都比falg小,开始从下一行进行匹配
- 如果比falg大,说明该行可能有与falg相等的整数
- 如果将整个矩阵都找过后没有找到,就返回-1,如果找到了就返回1
代码部分
#include<stdio.h>int find(int array[10][10], int cows, int columns,const int num )
{int row = 0;//定义行数int column = columns - 1;//定义列数 这时形参columns是列数,所以应该-1才是最后一列的坐标int ret = -1;//定义一个返回值, 初始值为-1:如果以下代码没有找到这个数,就返回-1,找到了就返回1while (row <= cows && column >= 0){if (num == array[row][column]){ret = 1;break;}//用杨氏矩阵右上角的数值于num进行比较,如果想等,将1赋给ret,然后结束循环,否则进行下一步操作if (num > array[row][column]){row++;column = columns - 1;//每次从下一行查找时,都要从最右边的整数开始//如果不从最右边开始,可能flag就在array[row][column]的右边(可以自行测试)continue;}//如果右上角这个数值小于num,由于这个数是该行最大值,则跳到下一行进行比较,跳出此次循环,进行下一次循环if (num < array[row][column]){column--;continue;}//如果右上角这个数值大于num,则跳到前一列进行比较,跳出此次循环,进行下一次循环}return ret;}int main()
{int arr[5][8] = { { 1, 2, 3, 4, 5 }, { 2, 4, 5, 6, 7 }, { 3, 4, 5, 6, 7 } };int num = 11;int row = sizeof(arr) / sizeof(arr[0]);int column = sizeof(arr[0]) / sizeof(int);int ret = 0;ret = find(arr, row, column, num);if (ret == 1){printf("找到了\n");}else{printf("没有找到!\n");}return 0;
}