题目内容

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

要求:时间复杂度小于O(N)。
注意:不能采用遍历的方法,遍历的时间复杂度直接就等于O(N)。

解题思路

先假设有这样一个3*3的矩阵。
矩阵是采用递增的方式进行排序的,每行每列的最末端的数一定是最大的。

1 2 3 ←
4 5 6 ←
7 8 9 ←
↑ ↑ ↑

假设要找的数为k.

1.从右上角开始找,拿3和k比较
①如果3 < k,则说明3所在的这一行没有要找的数。小于k去掉行
②如果3 > k,则说明3所在的这一列没有要找的数。大于k去掉列

2.从左下角开始找,拿7和k比较
①如果7 < k,则说明7所在的这一列没有要找的数。小于k去掉列
②如果7 > k,则说明7所在的这一行没有要找的数。大于k去掉行

代码实现

#include <stdio.h>
#define MAX 3int Findnum(int arr[MAX][MAX],int k,int* px,int* py)
{int x = 0;//行int y = *py -1;//列while(x <= *px -1 && 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()
{int arr[MAX][MAX]= {{1,2,3},{4,5,6},{7,8,9}};int k,x = 3,y = 3;printf("请输入要查找的数:");scanf ("%d",&k);if(1 == Findnum(arr,k,&x,&y)){printf("找到了,下标是:%d %d\n",x,y);}else{printf("没找到\n");}return 0;
}

执行结果

请输入要查找的数:3
找到了,下标是:0 2
请输入要查找的数:14
没找到

循环条件

当没找到这个数,而对xy进行调整的时候,要么去掉一行,要么去掉一列,总之就是不停的往左下角7压缩。最后就会导致行自增到最多两行,列自减到最少0列

1 2 3—0
4 5 6—1
7 8 9—2
0 1 2

所以循环条件应该定为x <= *px -1 && y >= 0

C语言编程题——杨氏矩阵相关推荐

  1. 【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)

    前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失. 个人刷题练习系列专栏:个人CSDN牛客刷题专栏. 题目来自:牛客/题库 / 在线编程 / 剑 ...

  2. c语言代码题及答案,c语言编程题精选及答案

    c语言编程题精选及答案 C 语言编程题精选 C 语言学习 2010-11-30 15:48:25 阅读 47 评论 0 字号:大中小 订阅 1. 有函数 F(x)=(x+1)2 和 G(x)=2x+1 ...

  3. 山西专升本C语言编程题真题

    山西专升本C语言编程题真题 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年 2019年 2020年 所有代码为博主本人思路,并非标准答案,仅 ...

  4. c语言编程四门成绩,C语言编程题与答案

    <C语言编程题与答案>由会员分享,可在线阅读,更多相关<C语言编程题与答案(25页珍藏版)>请在人人文库网上搜索. 1.WORD格式-可编辑-C语言编程题1. (*)求分数序列 ...

  5. c语言中求匀加速直线速度,速求C语言编程题 c语言编程速度求

    导航:网站首页 > 速求C语言编程题 c语言编程速度求 速求C语言编程题 c语言编程速度求 相关问题: 匿名网友: #include //计算行元素和 void CountRow(int a[] ...

  6. c++ 求四边形面积和周长_C语言编程题 题目:任意输入4个点,求围成四边形的面积是多少?...

    C语言编程题:任意输入4个点,求围成四边形的面积是多少.代码如下: #include "stdio.h" #include "math.h" void main ...

  7. c语言小学生加法考试题程序4,c语言编程题及答案.doc

    c语言编程题及答案.doc C C 语言编程题及答案(三)语言编程题及答案(三) 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列 要求以循序渐 ...

  8. 灯泡四个闪烁c语言程序设计教程课后答案,c语言编程题及答案4.doc

    C C 语言编程题及答案 三 语言编程题及答案 三 1 给小学生出加法考试题 编写一个程序 给学生出一道加法运算题 然后判断学生输入的答案对错与否 按下列 要求以循序渐进的方式编程 程程序序 1 通过 ...

  9. c语言程序题是如何判分的,C语言编程题判分系统的研究与实现

    摘要: 随着计算机技术和因特网的发展,B/S模式的教学系统在高校教学中显得越来越重要.C语言程序设计是计算机专业的一门重要的基础课程,具有实践性强的特点,在教学中应加大实践教学比例.本文利用网络技术开 ...

最新文章

  1. Alibaba Dubbo框架同步调用原理分析-1
  2. 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)
  3. 数据之“星”汇聚,第三届「星斗奖」申报正式启动!
  4. powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
  5. 学习Machine Leaning In Action(四):逻辑回归
  6. python中列表生成式strip_python之列表生成式
  7. 16 树的子结构(这题多复习)
  8. 开源大数据:Iceberg新一代数据湖技术实践
  9. 知识竞赛中如何按抢答器才能最先抢到
  10. 计算机网络系统是由计算机系统,计算机网络由哪几部分组成?
  11. qt linux 程序设置字体,QT 程序更换字体方法之一
  12. 牛客-1114E 老瞎眼 pk 小鲜肉(思维 + 离线 + 线段树 - 维护区间最小值)
  13. TP5简单实现类似京东淘宝多级商品筛选功能。
  14. uml建模外卖订餐系统
  15. nginx中deny和allow详解
  16. php hook类,基于 CodeIgniter 构建 JWT RESTfull API Server
  17. 1. 计算机网络和因特网
  18. 从零开始学习CANoe(十九)—— Diagnostics
  19. SpringCloud学习笔记3:Spring Cloud Netflix 组件(五大神兽)
  20. linux桌面版和服务器版区别_简单普及一些linux和windows的区别,减少新入手一些云服务时的不适应...

热门文章

  1. Js实现Base64编码、解码
  2. 全国CSM敏捷教练认证将于2023年3月25-26开班,报名从速!
  3. 敏捷考证?你应该知道的敏捷体系认证名单(最全整理)
  4. Oracle 时间差计算 数据库关于时间计算
  5. ChinaSkills-网络系统管理(2021年全国职业院校技能大赛B-1 模块 B:Windows 环境 评分标准 )
  6. 京东风控团队带你全方位解读特征工程
  7. 三态内容寻址存储器(TCAM)概念
  8. C语言课程设计题目汇总
  9. 实验二 Linux系统用户与组的管理
  10. 何为数据库连接池?其工作原理是什么?