public class Saddle {
public static void main(String[] args) {
/*
Math.random()用于随机生成一个从0到1之间的随机浮点数( 0 <= n < 1 )
*/
int n = (int)(Math.random()*5+2); //随机生成 2 3 4 5 6这五个数
// System.out.println(n);
int[][] a = new int[n][n];
//搞一个二维随机数组
for (int i = 0 ; i < a.length ; i ++) {
for (int j = 0 ; j < a[i].length ; j ++) {
a[i][j] = (int)(Math.random()*100); //随机生成0到100的数
}
}
// int[][] a = {{47,83,85,100},{1,27,2,1},{2,3,3,1},{1,1,1,1}};
//打印
for (int i = 0 ; i < a.length ; i ++) {
for (int j = 0 ; j < a[i].length ; j ++) {
System.out.print(a[i][j] + "\t");
}
System.out.println();
}
int[] max = findMax(a);
int[] min = findMin(a);
for (int i = 0 ; i < max.length ; i ++) {
for (int j = 0 ; j < min.length ; j ++) {
if (max[i] == min[j]) {
System.out.println("鞍点是:" + max[i]);
}
}
}
}
//求每行最小数
static int[] findMin(int a[][]) {
int[] min = new int[a.length];
//初始化最小行数列
for (int i = 0 ; i < a.length ; i ++) {
min[i] = a[i][0];
}
for (int i = 0 ; i < a.length ; i ++) {
for (int j = 0 ; j < a[i].length ; j ++) {
if(min[i] > a[i][j]) {
min[i] = a[i][j];
}
}
}
//得到最小数列后,返回
return min;
}
//求每列最大数
static int[] findMax(int a[][]) {
int[] max = new int[a.length];
//初始化最大列数
for (int j = 0 ; j < a.length ; j ++) {
max[j] = a[0][j];
}
for (int j = 0 ; j < a.length ; j ++) {
for (int i = 0 ; i < a[j].length ; i ++) {
if (max[j] < a[i][j]) {
max[j] = a[i][j];
}
}
}
return max;
}
}
通过建立两个数组分别记录每一行的最小值和每一列最大值,再通过循环判断,若相等即为鞍点。