永发信息网

java程序中关于二维数组的计算题目

答案:3  悬赏:60  手机版
解决时间 2021-05-05 22:27
  • 提问者网友:星軌
  • 2021-05-05 16:00

求矩阵中所有马鞍点的个数

马鞍点就是在M*N矩形A中,如果元素A(i*J) 注(i*J)是A的下标 ,我打不出来下标,是行中最小值又是列中最大值,A(i*J)就是这个矩阵的一个马鞍点

假设已给出一个4行5列的二维数组,如下

int a[][]={{1,2,3,4,5,},{7,3,4,5,6},{2,1,5,4,3},{5,3,6,5,4}};

请编程求出所有马鞍点

老师做了一点提示,先找行中的最小值,再找列中的最大值,但是我还是不懂。。

我觉得很难。。。期待有高手帮助

最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-05-05 17:33

初步判断 任何矩阵马鞍点只能有一个 所以一旦发现即可跳出循环


public class Hello {
public static void main(String[] args) {

int a[][]={{10,20,30,40},
{500,38,37,200},
{300,36,34,600},
{4,5,5,7}};
int max=0,min=1000;
int x,y=0;
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
if(a[i][j]<min){
min=a[i][j];
y=j;
x=i;
}
}
for(int j=0;j<4;j++){
if(a[j][y]>max)
{
max=a[j][y];
}
}
if(max==min)
{
System.out.println(max);
break;

}else{


max=0;
min=1000;
}
}


}


}


全部回答
  • 1楼网友:过活
  • 2021-05-05 18:54
public class AnDian { public static void anDian(int [][] a){ for (int i = 0; i < a.length; i++) { int k = 0 ; int kk = 0 ; int min = 0 ; int max = 0 ; min = a[i][0]; for (int j = 0; j < a[i].length; j++) { if(a[i][j]<min){ min = a[i][j]; k = j ; } } max = a[0][k]; for (int j = 0; j < a.length; j++) { if(a[j][k]>max){ max = a[j][k]; kk = j ; } } if(i==kk){ System.out.print(i + " "+ k + " "+ a[i][k] + " "); } } } public static void main(String[] args) { int a[][]={{1,2,3,4,5},{7,3,4,5,6},{2,1,5,4,3},{5,3,6,5,4}}; anDian(a); } }
  • 2楼网友:由着我着迷
  • 2021-05-05 17:55

这是我以前用C语言做的改了一下符合你的要求,你参看着想象你的JAVA,编程都是一样,主要是思想,你应该学了C语言了吧。

#include<stdio.h> #define sz 30 void f(int a[][],int n); int main() { int i,j,size, array[sz][sz]; printf("please input array 大小 size:\n"); scanf("%d",&size); printf("please input array[][]:\n"); for(i=0;i<size;i++) for(j=0;j<size;j++) scanf("%d",&array[i][j]); f(array,size); return 0;

} void f(int a[][],int n) { int i,j,k,x,y,min,max,rowx,count=0; for(i=0;i<n;i++) { min= a[i][0]; for(j=0;j<n;j++) { if( a[i][j]<min) { min= a[i][j]; x=i; y=j; } rowx=x; max= a[x][y]; for(k=0;k<n;k++) { if( a[k][y]>max) { max= a[k][y]; x=k; } } } if(rowx==x) { count++; printf("array's %d row %d scol 鞍点值:%d.\n",x,y, a[x][y]); } } printf("鞍点总数为: %d\n",count); }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯