C语言编程题杨氏矩阵算法快速上手示例详解

 更新时间:2021年10月22日 16:07:00   作者:高邮吴少  
这篇文章主要为大家介绍了C语言编程题杨氏矩阵算法快速上手的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪

题目概要

有一个数字矩阵,矩阵的每行从左到右都是递增的,矩阵从上到下都是递增的,请编写程序在这样的矩阵中查找某个数字是否存在?

一、解题思路

对于查找一个数组中元素是否存在,很多同学第一想法就是从头到尾遍历一遍。这样的想法优点是代码简单且无脑容易上手,但是这样的缺点也很明显,比如是m *n的数组,你从头到尾遍历,最坏情况要找m *n次。题目给的相关条件比如从左向右递增,从上向下递增你也完全没有使用,这样的暴力求解显然不是我们想看到的

我们来介绍一种方法,以下列二维数组进行举例
1 2 3
4 5 6
7 8 9
根据矩阵的每行从左到右都是递增这个特性,我们知道矩阵的每一行最后一个数都是该行最大的,比如上面这个矩阵的3,6,9。对于7是否在这个矩阵中,我们可以与每行的最后一个数比较,如果7小于当前行,则在当前行遍历,否则进行与下一行最后一个数的比较,如果最后一行都小于7说明7是不在该矩阵中的

二、具体代码

代码如下(示例):

#include<stdio.h>
void find(int arr[3][3], int k,int h,int l)//h和l分别表示行和列
{
	int x = 0;//第一行横坐标
	int y = l - 1;//第一行最后一列纵坐标
	for (x = 0,y = l - 1;arr[x][y] < k&&x<=h-1;x++)//判断条件多加一个x<h-1是防止越数组访问
	{
		;//过滤掉无用的行
	}
	if (x == h)//x==h说明所有行都不匹配
	{
		printf("该数组没有这个数\n");
	}
	else if(arr[x][y]>k)
	{
		int i = 0;
		for (i = 0;i < l;i++)
		{
			if (k == arr[x][i])
			{
				printf("找到了,该数在第%d行,第%d列", x+1, i + 1);
			}
		}
	}
	else if (arr[x][y] == k)
	{
		printf("找到了,该数在第%d行,第%d列", x + 1, y + 1);
	}
}
int main()
{
	int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
	int k = 0;
	printf("请问你要查找的数是:");
	scanf("%d", &k);
	find(arr, k, 3, 3);
}

以上就是C语言编程题杨氏矩阵算法快速上手示例详解的详细内容,更多关于C语言编程杨氏矩阵算法的资料请关注脚本之家其它相关文章!

相关文章

  • C语言实现运动会管理系统

    C语言实现运动会管理系统

    这篇文章主要为大家详细介绍了C语言实现运动会管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • EasyX绘制透明背景图的方法详解

    EasyX绘制透明背景图的方法详解

    这篇文章主要为大家详细介绍了EasyX绘制透明背景图的方法,文中的示例代码讲解详细,对我们深入了解EasyX有一定的帮助,需要的可以参考一下
    2023-01-01
  • C语言中通用工具库stdlib.h的一些常用函数

    C语言中通用工具库stdlib.h的一些常用函数

    这篇文章主要给大家介绍了关于C语言中通用工具库stdlib.h的一些常用函数,stdlib.h头文件包含了许多C标准库函数的原型声明和宏定义,这些函数主要与动态内存分配、随机数生成、进程控制、字符串转换等相关,需要的朋友可以参考下
    2024-01-01
  • 详解C++何时需要拷贝构造函数

    详解C++何时需要拷贝构造函数

    拷贝构造函数是一个特殊的构造函数,用于创建一个新对象,该对象与另一个同类对象具有相同的属性和值,在 C++ 中,拷贝构造函数通常采用另一个同类对象作为参数,并使用该对象初始化新对象,本文给大家讲讲何时需要拷贝函数,需要的朋友可以参考下
    2023-09-09
  • opencv车道线检测的实现方法

    opencv车道线检测的实现方法

    这篇文章主要介绍了opencv车道线检测的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • C语言进阶:指针的进阶(2)

    C语言进阶:指针的进阶(2)

    这篇文章主要介绍了C语言指针详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下
    2021-09-09
  • C语言猜凶手及类似题目的实现示例

    C语言猜凶手及类似题目的实现示例

    本文主要介绍了C语言猜凶手及类似题目的实现示例,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • C++超详细讲解数组操作符的重载

    C++超详细讲解数组操作符的重载

    C 语言提供了丰富的操作符,有:算术操作符,移位操作符,位操作符,赋值操作符,单目操作符,关系操作符,逻辑操作符,条件操作符等。接下了让我们探究一下数组操作符的重载
    2022-06-06
  • c++归并排序详解

    c++归并排序详解

    归并排序遵循分治法的思想:将原问题分解为几个规模较小但类似于原问题的子问题,递归地求解这些子问题,然后再合并这些子问题的解来建立原问题的解。分治模式在每层递归时都有三个步骤:分解、解决、合并。归并排序完全遵循该模式。
    2017-05-05
  • 关于PCL出现"无法找到 pcl_commond.dll 文件程序无法执行"的问题及解决方法

    关于PCL出现"无法找到 pcl_commond.dll 文件程序无法执行"的问题及解决方法

    这篇文章主要介绍了PCL出现"无法找到 pcl_commond.dll 文件程序无法执行"的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07

最新评论