求解!!在线等
二维数组
题目描述
Description
求一个nXn数阵中的马鞍数,输出这的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下:(n=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
则1行1列上的数就是马鞍数。
输入
Input
第一行,一个数N
接下来N行,每行N个数
输出
Output
输出马鞍数所在的行列
样例输入
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
样例输出
1 1
我的代码:应该怎样改
import java.util.Scanner;
public class 二维数组J {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int n=rd.nextInt();
int arr[][]=new int[n][n];
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
arr[i][j]=rd.nextInt();
}
}
int max=arr[0][0];
int min=arr[0][0];
int maxweizhi = 0;
int minweizhi=0;
for(int i=1;i<arr.length;i++)
{
if(arr[0][i]<min)
{
min=arr[0][i];
minweizhi=i+1;
}
if(arr[i][0]>max)
{
max=arr[i][0];
maxweizhi=i+1;
}
}
System.out.print(max+" "+min+" "+maxweizhi+" "+minweizhi);
}
}
import java.util.Scanner;
import java.util.Arrays;
public class SaddleNumber {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner rd=new Scanner(System.in);
int n=rd.nextInt();
int arr[][]=new int[n][n];
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
arr[i][j]=rd.nextInt();
}
}
int max=arr[0][0];
int min=arr[0][0];
int maxweizhi = 0;
int minweizhi=0;
int[] minInLine=new int[n];
for(int i=0;i<arr.length;i++)//外层循环,找到每行最小数.放入一个一唯数组.
{
min=arr[i][0];
minInLine[i]=0;
for(int j=1;j<arr[i].length;j++)
{
if(arr[i][j]<min)
{
min=arr[i][j];
minInLine[i]=j;
}
}
}
for(int j=0;j<minInLine.length;j++)//判断每行里的最小值是否是当列最大值。
{
int m=minInLine[j];//行最大值的列数。
max=arr[j][m];
int flag=0;//标志位。
for(int k=0;k<j;k++)//前面列的元素比较,发现不是最大,退出此循环,flag为1。
{
if(arr[k][m]>max)
{
flag=1;
break;
}
}
for(int k=j+1;k<arr.length;k++)//后面列元素比较。
{
if(flag==1)//如果前面已经发现不是最大,后面的不比较了。
{
break;
}
if(arr[k][m]>max)
{
flag=1;
}
}
if(flag==0)
{
System.out.println(""+j+" line and "+m+" row is a saddle number! it is "+arr[j][m]);
}
}
}
}
import java.util.Scanner;
}