首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Eclipse开发 >

求解!

2012-12-26 
求解!!在线等二维数组题目描述Description求一个nXn数阵中的马鞍数,输出这的位置。所谓马鞍数,是指在行上最

求解!!在线等
二维数组
题目描述

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;
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]);
}
}
   }


}

热点排行