C语言编程题——杨氏矩阵
题目内容
有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数组是否存在。
要求:时间复杂度小于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语言编程题——杨氏矩阵相关推荐
- 【牛客刷题专栏】0x27:JZ29 顺时针打印矩阵(C语言编程题)
前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失. 个人刷题练习系列专栏:个人CSDN牛客刷题专栏. 题目来自:牛客/题库 / 在线编程 / 剑 ...
- c语言代码题及答案,c语言编程题精选及答案
c语言编程题精选及答案 C 语言编程题精选 C 语言学习 2010-11-30 15:48:25 阅读 47 评论 0 字号:大中小 订阅 1. 有函数 F(x)=(x+1)2 和 G(x)=2x+1 ...
- 山西专升本C语言编程题真题
山西专升本C语言编程题真题 2010年 2011年 2012年 2013年 2014年 2015年 2016年 2017年 2018年 2019年 2020年 所有代码为博主本人思路,并非标准答案,仅 ...
- c语言编程四门成绩,C语言编程题与答案
<C语言编程题与答案>由会员分享,可在线阅读,更多相关<C语言编程题与答案(25页珍藏版)>请在人人文库网上搜索. 1.WORD格式-可编辑-C语言编程题1. (*)求分数序列 ...
- c语言中求匀加速直线速度,速求C语言编程题 c语言编程速度求
导航:网站首页 > 速求C语言编程题 c语言编程速度求 速求C语言编程题 c语言编程速度求 相关问题: 匿名网友: #include //计算行元素和 void CountRow(int a[] ...
- c++ 求四边形面积和周长_C语言编程题 题目:任意输入4个点,求围成四边形的面积是多少?...
C语言编程题:任意输入4个点,求围成四边形的面积是多少.代码如下: #include "stdio.h" #include "math.h" void main ...
- c语言小学生加法考试题程序4,c语言编程题及答案.doc
c语言编程题及答案.doc C C 语言编程题及答案(三)语言编程题及答案(三) 1. 给小学生出加法考试题 编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列 要求以循序渐 ...
- 灯泡四个闪烁c语言程序设计教程课后答案,c语言编程题及答案4.doc
C C 语言编程题及答案 三 语言编程题及答案 三 1 给小学生出加法考试题 编写一个程序 给学生出一道加法运算题 然后判断学生输入的答案对错与否 按下列 要求以循序渐进的方式编程 程程序序 1 通过 ...
- c语言程序题是如何判分的,C语言编程题判分系统的研究与实现
摘要: 随着计算机技术和因特网的发展,B/S模式的教学系统在高校教学中显得越来越重要.C语言程序设计是计算机专业的一门重要的基础课程,具有实践性强的特点,在教学中应加大实践教学比例.本文利用网络技术开 ...
最新文章
- Alibaba Dubbo框架同步调用原理分析-1
- 操作系统(四) | 经典进程的同步问题(生产者--消费者问题、哲学家进餐问题、读者--写者问题)
- 数据之“星”汇聚,第三届「星斗奖」申报正式启动!
- powerquery加载pdf_pdf转换为excel,你不会,同事点点鼠标2分钟就搞定了
- 学习Machine Leaning In Action(四):逻辑回归
- python中列表生成式strip_python之列表生成式
- 16 树的子结构(这题多复习)
- 开源大数据:Iceberg新一代数据湖技术实践
- 知识竞赛中如何按抢答器才能最先抢到
- 计算机网络系统是由计算机系统,计算机网络由哪几部分组成?
- qt linux 程序设置字体,QT 程序更换字体方法之一
- 牛客-1114E 老瞎眼 pk 小鲜肉(思维 + 离线 + 线段树 - 维护区间最小值)
- TP5简单实现类似京东淘宝多级商品筛选功能。
- uml建模外卖订餐系统
- nginx中deny和allow详解
- php hook类,基于 CodeIgniter 构建 JWT RESTfull API Server
- 1. 计算机网络和因特网
- 从零开始学习CANoe(十九)—— Diagnostics
- SpringCloud学习笔记3:Spring Cloud Netflix 组件(五大神兽)
- linux桌面版和服务器版区别_简单普及一些linux和windows的区别,减少新入手一些云服务时的不适应...