java从键盘输入一个数组,找出其中的鞍点

java从键盘输入一个数组,找出其中的鞍点,第1张

/*

            程序的功能:

            求任意的一个m×n矩阵的鞍点——鞍点是指该位置上的元素在该行上为最大、在该列上为最小,

            矩阵中可能没有鞍点,但最多只有一个鞍点。

    m、n(2<=m<=20、2<=n<=20)及矩阵元素从键盘输入(只考虑int型和每行、每列中没有并列最大/最小的情况)。

    */

    public static void main(String[] args) {

        int[][] arr = new int[20][20]

        int m, n

        int max, min

        int maxHPos, maxLPos, minHPos, minLPos

        int flag = 0

        Scanner sc = new Scanner(System.in)

        System.out.println("请输入m的值:")

        m = sc.nextInt()

        System.out.println("请输入n的值:")

        n = sc.nextInt()

        /* 从键盘输入m×n矩阵,并存放到数组arr中 */

        System.out.println("请输入矩阵的值:")

        for (int i = 0 i < m i++) {

            for (int j = 0 j < n j++) {

                arr[i][j] = sc.nextInt()

            }

        }

        /* 在矩阵中找鞍点 */

        for (int i = 0 i < m i++) {

            /* 找第i行的最大值及最大值的下标(包括行标和列标),i的值从0开始 */

            max = arr[i][0]

            maxHPos = i

            maxLPos = 0

            for (int j = 1 j < n j++) {

                if (arr[i][j] > max) {

                    max = arr[i][j]

                    maxHPos = i

                    maxLPos = j

                }

            }

            /* 在第i行的最大值所在列找该列的最小值及其下标 */

            min = arr[0][maxLPos]

            minHPos = 0

            minLPos = maxLPos

            for (int k = 1 k < m k++) {

                if (arr[k][maxLPos] < min) {

                    min = arr[k][maxLPos]

                    minHPos = k

                    minLPos = maxLPos

                }

            }

            /* 判断第i行的最大值是否是第i行最大值所在列的最小值,如果是,找到鞍点*/

            if ((maxHPos == minHPos) && (maxLPos == minLPos)) {

                System.out.println(String.format("有鞍点:arr[%d][%d]=%d", maxHPos,

                    maxLPos, arr[maxHPos][maxLPos]))

                flag = 1 //给变量flag赋值1,表示鞍点已找到

                break //鞍点已找到,结束查找过程

            }

        }

        if (0 == flag) //flag的值为0,表示在矩阵中没有找到鞍点

        {

            System.out.println("没有鞍点")

        }

    }

概念错了!!!行中最大,列中最小

package web

/**

 * 在规格矩阵中,一个数在所在行中是最大值,在所在列中是最小值,则被称为鞍点

 */

public class SaddlePoint

{

public static void main ( String[] args )

{

int a[][] = { { 2, 1, 1118, 1 }, { 1, 3, 111, 21 }, { 2, 9, 11111, 1 } }

findSaddlePoints (a)

}

public static void findSaddlePoints ( int[][] array )

{

String colString = "|"

// 创建列中的行

for ( int i = 0 i < array[0].length i++ ) // 规格矩阵列

{

int colMin = Integer.MAX_VALUE

int row = -1

for ( int j = 0 j < array.length j++ ) // 行

{

if (array[j][i] < colMin)

{

colMin = array[j][i]

row = j

}

}

colString += row + "," + i + "," + colMin + "|"

}

String rowString = "|"

for ( int j = 0 j < array.length j++ )

{

int rowMax = Integer.MIN_VALUE

int col = -1

for ( int k = 0 k < array[j].length k++ ) // 不同列

{

if (array[j][k] > rowMax)

{

rowMax = array[j][k]

col = k

}

}

rowString += j + "," + col + "," + rowMax + "|"

}

String[] s1 = colString.split ("\\|")

String[] s2 = rowString.split ("\\|")

for ( String ss1 : s1 )

{

for ( String ss2 : s2 )

{

if (!"".equals (ss1) && ss1.equals (ss2))

{

String[] sx = ss1.split (",")

System.out.println ("SaddlePoint is : (" + sx[0] + ", " + sx[1] + ") " + sx[2])

}

}

}

}

}

#include#defineN10#defineM10voidmain(){inti,j,k,m,n,flag1,flag2,a[N][M],max,maxjprintf("输入行数n:")scanf("%d",&n)printf("\n输入列数m:")scanf("%d",&m)for(i=0imax){max=a[i][j]maxj=j}for(k=0,flag1=1ka[k][maxj])flag1=0if(flag1){printf("\n第%d行第%d列的%d是鞍点\n",i,maxj,max)flag2=1}}if(!flag2)printf("\n矩阵无鞍点!\n")}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/11239570.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存