微科社区,轻松开发从此开始! 请登陆 免费注册

微科社区

当前位置:首页 > Java平台 > Eclipse >

马鞍数 【二维数组】

时间:2014-03-14 02:02  浏览:努力统计中...
求一个nXn数阵中的马鞍数,输出这的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下:(n=5) 56789 45678 34521 23490 12548 则1行1列上的数就是马鞍数。 输入 Input 第一行,一个数
求一个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
我的代码:应该怎样填补才正确啊
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];
int max=arr[0][0];
int min=arr[0][0];
int weizhi = 0;
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
arr[i][j]=rd.nextInt();
}
}
for(int i=1;i<arr.length;i++)
{
if(arr[0][i]<min)
{
min=arr[0][i];
System.out.print(min);
}
if(arr[i][0]>max)
{

}

}
System.out.print(max+" "+min);
}


这个直接点的方法就找每行的最小,再判断它在该列是否是最大就可以啊。
比如你上面给出的数据,用一个二维数组记录每行最小的数的坐标。
int row_min[][]={{0,0},{1,0},{2,4},{3,4},{4,0}};
再用一个数组记录每列最大的数的坐标
int col_max[]={{0,0},{0,1},{0,2},{3,3},{0,4}};
在弄一个循环依次比较这2个数组的每队坐标。遇到相等就输出,因为相等即表示又是行最小又是列最大。

第二个数组该是[][]..
具体的找每组的最大最小应该不难写,就是循环比较就行,只是记录可能稍微麻烦一点,自己实践下。

using System;

namespace testConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            //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
            int[,] array = new int[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 } };
            bool blTag = true;
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    blTag = true;
                    for (int n = 0; n < 5; n++)
                    {
                        if (array[i, j] > array[i, n])
                        {
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线------