【要求】找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。

【咀嚼】我的思路是,某一行上有可能有两个相等的数,且都是最大值,如果只判断第一个数,第二个便不再判断,而第二个数才是其所在的列上最小的,就会把一些鞍点漏掉(在列上也是如此,相同的都要判断)。所以我设定一行上可以有一个以上鞍点,也就是说,如果整个数组的元素都是相同的,那么这个数组里的每一个元素都是鞍点。

据于此,我写下如下代码

 1 #include<stdio.h> 2 int main() 3 { 4     int ctu; 5     do 6     {        //begin 7         int a[18][18],i,j,b=1,c=0,d,m,n;        //b用来标记,c用来计数,d是另外的循环控制 8         printf("请自定义数组大小,如3*4\n"); 9         scanf("%d*%d",&m,&n);10         printf("请输入一个%d×%d的二维数组\n",m,n);11         for(i=0;i<m;i++)12             for(j=0;j<n;j++)13                 scanf("%d",&a[i][j]);        //输入数组14         for(i=0;i<m;i++)                //第一层循环,控制行15             for(j=0;j<n;j++)            //第二层循环,控制列16             {17                 for(d=0;d<n;d++)        //判断是否行上最大18                     if(a[i][j]<a[i][d]) b=0;19                 if(b==0) continue;20                 for(d=0;d<m;d++)        //判断是否列上最小21                     if(a[i][j]>a[d][j]) b=0;22                 if(b==0) continue;23                 c++;24                 printf("第%d个鞍点:%d,位于第%d行、第%d列\n",c,a[i][j],i+1,j+1);25             }26         if(c==0)printf("该二维数组没有鞍点");27         else printf("该数组有%d个鞍点",c);28     printf("\n是否继续?\n输入1继续,否则任意键退出\n");        //end29     scanf("%d",&ctu);30     }while(ctu==1);31     return 0;32 }

但是在测试时出现了如下错误,即只能判断出所有的元素都相等的情况,一般情况则无法判断。

所有的元素都相同,可以正确地把所有的数字都找出来,但是输入一个普通的数字,则无法正常找出,下图

经过分析,原来是在第16与17行之间少了一个让判断标志b重置为1的语句,导致如果第一个元素不成立,则b变成了0,之后的每一个元素都会直接跳出。

修改如下:

 1 #include<stdio.h> 2 int main() 3 { 4     int ctu; 5     do 6     {        //begin 7         int a[18][18],i,j,b,c=0,d,m,n;        //b用来标记,c用来计数,d是另外的循环控制 8         printf("请自定义数组大小,如3*4\n"); 9         scanf("%d*%d",&m,&n);10         printf("请输入一个%d×%d的二维数组\n",m,n);11         for(i=0;i<m;i++)12             for(j=0;j<n;j++)13                 scanf("%d",&a[i][j]);        //输入数组14         for(i=0;i<m;i++)                //第一层循环,控制行15             for(j=0;j<n;j++)            //第二层循环,控制列16             {17                 b=1;                    //先前的错误就在于此,要重置b为118                 for(d=0;d<n;d++)        //判断是否行上最大19                     if(a[i][j]<a[i][d]) b=0;20                 if(b==0) continue;21                 for(d=0;d<m;d++)        //判断是否列上最小22                     if(a[i][j]>a[d][j]) b=0;23                 if(b==0) continue;24                 c++;25                 printf("第%d个鞍点:%d,位于第%d行、第%d列\n",c,a[i][j],i+1,j+1);26             }27         if(c==0)printf("该二维数组没有鞍点");28         else printf("该数组有%d个鞍点",c);29     printf("\n是否继续?\n输入1继续,否则任意键退出\n");        //end30     scanf("%d",&ctu);31     }while(ctu==1);32     return 0;33 }

测试成功

转载于:https://www.cnblogs.com/fengzy/archive/2011/11/12/2246739.html

【咀嚼C语言】二维数组找鞍点相关推荐

  1. c语言二维数组找鞍点,C语言,二维数组 找鞍点

    还是以前写过的东西.. 鞍点是什么?百度出来的东西 鞍点(Saddle point)在微分方程中,沿着某一方向是稳定的,另一条方向是不稳定的奇点,叫做鞍点.在泛函中,既不是极大值点也不是极小值点的临界 ...

  2. 二维数组找鞍点C++

    题目描述 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,二维数组的行列n,m以及二维数组均由键盘输入,当存在鞍点时,输出位置以及该点的值,当不存在鞍点时,输出-1 例如输入: ...

  3. C语言二维数组找出交集,【leetcode C语言实现】剑指 Offer 04. 二维数组中的查找...

    题目描述 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例: ...

  4. 二维数组找鞍点c语言,怎么求一个二维数组的鞍点

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #include #define MAX 100 int main() { int a[ MAX ] ...

  5. C语言练习二 :找出一个二维数组的鞍点

    1.鞍点的定义:某个元素在其所在行中最大.所在列中最小. 2.程序代码 //求一个二维数组的鞍点 二维数组可能没有鞍点,如果有,只能有一个 #include<stdio.h> int ma ...

  6. java利用二维数组查找鞍点_java找二维数组的鞍点

    LOGO 制作者: 制作者: 班级: 班级: 学号: 学号: 指导老师: 指导老师: 一.设计要求 求一个二维数组中的鞍点,即 该位置上的元素在该...... 54,98 19,32,34,65,34 ...

  7. C语言经典100题——求一个二维数组的鞍点

    <1>题目描述 找一个二维数组中的鞍点,即该位置上的元素在该行上最大.在该列上最小.也可能没有鞍点 1 2 3 4 5 6 7 8 9 //3为该二维数组中鞍点 <2>思路分析 ...

  8. c语言定二维义数组,C语言二维数组超细讲解

    用一维数组处理二维表格,实际是可行的,但是会很复杂,特别是遇到二维表格的输入.处理和输出. 在你绞尽脑汁的时候,二维数组(一维数组的大哥)像电视剧里救美的英雄一样显现在你的面前,初识数组的朋友们还等什 ...

  9. c语言程序设计歌手大奖赛,C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委...

    导航:网站首页 > C语言二维数组怎么做:设计青年歌手参加歌曲大奖赛计分系统: 共...,怎样用c语言程序设计? 青年歌手参加歌曲大奖赛,有10个评委 C语言二维数组怎么做:设计青年歌手参加歌曲 ...

  10. C语言二维数组元素的多种表示方法小结

    C语言二维数组元素的多种表示方法小结 昨天,一个小可爱问我,为何函数中,数组可以改变主函数中的值,比如b[i],就可以改原来数组中的值.其实b[i] 等价于 *(b + i)也是通过地址间接更改的,小 ...

最新文章

  1. Office 365系列(4)------Cutover Migrate 搬迁方式至O365上来方法及步骤总结
  2. 去掉ILDasm的SuppressIldasmAttribute限制
  3. 解决webpack打包vue项目后,部署完成后,刷新页面页面404
  4. ppt 的局部分大功能软件介绍.ZoomIt
  5. 【mark】linux 终端命令行下的快捷键(自己已验证所有)
  6. 查找字符串中要查找的字符串最后一次出现的位置
  7. 南通大学计算机组成原理期末考试题,南通大学计算机组成原理期末考试范围.docx...
  8. 软件用户体验非常好的前端设计
  9. VUE3 Router路由
  10. 设为首页收藏本站js代码(引自ecshop模板堂(ecmoban.com)
  11. 中国省市SQL表---市级行政单位表
  12. ARToolkit Part 1: Labelling 详解
  13. 怎样设定计算机屏幕锁定时间,电脑屏幕锁屏时间怎么设置
  14. 计算机应用基础第四章电子表格测试,2019年计算机应用基础第四章测试答案
  15. 毕业四年间,一壶漂泊,歌者默然(转帖)
  16. PHP可视化告警规则引擎,开源可视化规则引擎 决策引擎与规则引擎有什么区别?...
  17. Unraid使用记录:使用Docker与虚拟机
  18. 1099:零起点学算法06——再来一题除法算术题
  19. 重复代码 Duplicated Code
  20. unittest使用详解

热门文章

  1. 基于PCA进行多光谱和全色图像融合
  2. 使用虚拟机搭建ClouderaManager平台,并自动部署一个hadoop集群(CDH)
  3. Flutter之Visibility和Opacity使用说明
  4. php数组是否存在数组,php判断数组中是否存在某值
  5. python3中input输入浅谈_对Python3中的input函数详解
  6. 2019年互联网大厂月饼大盘点,最丑的一家竟然是...
  7. hx711压力传感器工作原理_压电式压力传感器原理,你了解吗?
  8. C语言substr函数用法,自己实现substr函数——C语言
  9. junit 生成html报告,gradle – 如何为JUnit 5测试创建HTML报告?
  10. 甘特图制作_甘特图是用什么软件制作?