求一个5×5数阵中的马鞍数

{
求一个5×5数阵中的马鞍数。输出它的位置。
所谓 马鞍数,是指在行上最小而在列上最大的数。
如下列的在第一行,第一列上的数就是马鞍数
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8 

}
program ex01;
var m:array[1..5,1..5] of integer;
  p,q,i,j,Hminn,Hmin,lmaxn,lmax;integer;
  ma:bealoon;
begin
//input
writeln('Input 5*5 array:');
for i:=1 to 5 do begin
for j:=1 to 5 do begin
read(m[j,i]);
end;
readln;
end;
//enter
for i:=1 to 5 do begin
for j:=1 to 5 do begin
write(m[j,i]);
end;
writeln;
end;
//start
for i:=1 to 5 do begin
     Hmin:=maxint;
     hminn:=0;
           //hangzhongmin
     for j:=1 to 5 do begin
           if m[j,i]<hmin then begin
                 hmin:=m[j,i];
                 hminn:=j;
           end;
     end;
     //lmax:=-maxint;?
     //lmaxn:=0;?
     ma:=true;
     for p:=1 to 5 do begin
           if m[hminn,p]>hmin then ma:=false;
     end;
     if ma=true then writeln(hminn,',',i,',',hmin);
end;
readln;
end.

原创文章如转载,请注明:转载自 夏寒在线 [ http://everstray.blog.zj.com/ ]
本文链接地址: http://everstray.blog.zj.com/blog/d-158938.html 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
马鞍点是指在一个矩阵,某个元素既是其所在行的最小值,同时又是其所在列的最大值。根据引用的描述,一个矩阵至多只能有一个马鞍点。 关于如何找出方阵马鞍,可以采用思路一或思路二。 思路一是最简单直接的方法,即对矩阵的每一个元素进行判断,若该元素既是其所在行的最小值,同时也是其所在列的最大值,则该点为矩阵一个马鞍点。思路一的时间复杂度为O(N^3),其N表示方阵的边长。示例代码如下: ```java void saddlePoint_one(int[][] matrix) { int ROW = matrix.length; int COL = matrix[0].length; for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { System.out.print(matrix[i][j] + "\t"); } System.out.println(); } boolean flag = true; for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { int k = 0, temp = matrix[i][j]; flag = true; for (k = 0; k < COL; k++) { if (temp > matrix[i][k]) { flag = false; break; } } for (k = 0; flag && k < ROW; k++) { if (temp < matrix[k][j]) { flag = false; break; } } if (flag) { System.out.println("matrix[" + i + "][" + j + "] : " + matrix[i][j] + " 为马鞍"); } } } } ``` 思路二是在思路一的基础上进行优化,使用一维组分别保存每行的最小值和每列的最大值,然后再对每个元素进行判断。思路二的时间复杂度为O(N),其N表示方阵的边长。示例代码如下: ```java void saddlePoint_two(int[][] matrix) { int ROW = matrix.length; int COL = matrix[0].length; int[] row_min = new int[ROW]; int[] col_max = new int[COL]; for (int i = 0; i < ROW; i++) { row_min[i] = matrix[i][0]; for (int j = 1; j < COL; j++) { row_min[i] = Math.min(row_min[i], matrix[i][j]); } } for (int j = 0; j < COL; j++) { col_max[j] = matrix[0][j]; for (int i = 1; i < ROW; i++) { col_max[j] = Math.max(col_max[j], matrix[i][j]); } } for (int i = 0; i < ROW; i++) { for (int j = 0; j < COL; j++) { if (matrix[i][j] == row_min[i] && matrix[i][j] == col_max[j]) { System.out.println("matrix[" + i + "][" + j + "] : " + matrix[i][j] + " 为马鞍"); } } } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值