1190 - C语言7.14

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

找出一个二维数组中的所有鞍点,即该位置上的元素在该行中最大但是在该列中最小。需要注意有可能鞍点不存在,此时需要输出“NO”。

题目输入

第一行有2个正整数n和m,表示二维数组的高度和宽度,保证n和m均不超过50。

之后的n行每行有m个用空格隔开的整数,表示二维数组对应位置的值。

题目输出

当鞍点存在时,将每个鞍点的信息在一行内输出,输出三个用空格隔开的整数,分别为鞍点元素的值以及其所在的行号和列号,有多个鞍点时,按照元素读入的顺序进行输出。当鞍点不存在时,在一行内输出“NO”。

请注意不需要输出引号,并请注意行尾输出换行。

输入/输出样例

输入格式

2 3
23 83 15
99 98 97

输出格式

83 0 1

C语言解答

#include<stdio.h>
int main(){
	int n,m,tag;
	int i,j,k,maxi;
	int a[50][50];
	scanf("%d%d",&n,&m);
	for(i=0;i<n;i++)
		for(j=0;j<m;j++)
			scanf("%d",&a[i][j]);

	for(i=0;i<n;i++){
		tag=1;
		maxi=0;
		for(k=0;k<m;k++){
			
			if(a[i][maxi]<a[i][k])
				maxi=k;
		}
		for(j=0;j<n;j++){
			if(a[i][maxi]>a[j][maxi])
				tag=0;
		}
		if (tag==1)
			printf("%d %d %d\n",a[i][maxi],i,maxi);
	}
			
			return 0;
}

C++解答

#include <stdio.h>
int main() {
	int dat[50][50];
	int n, m, i, j, k, saddle, saddleCnt = 0;
	scanf("%d%d", &n, &m);
	for (i = 0;i < n;i++) {
		for (j = 0;j < m;j++) {
			scanf("%d", &dat[i][j]);
		}
	}
	for (i = 0;i < n;i++) {
		for (j = 0;j < m;j++) {
			saddle = 1;
			for (k = 0;k < m && saddle == 1;k++)
				if (dat[i][k] > dat[i][j])
					saddle = 0;
			for (k = 0;k < n && saddle == 1;k++)
				if (dat[k][j] < dat[i][j])
					saddle = 0;
			if (saddle == 1) {
				saddleCnt++;
				printf("%d %d %d\n", dat[i][j], i, j);
			}
		}
	}
	if (saddleCnt == 0)
		puts("NO");
	return 0;
}

Java解答



import java.util.Scanner;

public class Main {
   private static Scanner s = new Scanner(System.in) ;
   
   public static void main(String[] args) {
	  int n = s.nextInt() ;
	  int m = s.nextInt() ;
	  int a[][] = new int[n][m] ;
	  
	  for (int i = 0; i < a.length; i++) {
		for (int j = 0; j < a[i].length; j++) {
			a[i][j] = s.nextInt() ;
		}
	  }
	  int max = 0 ;
	  int x = 0 ;
	  int y = 0 ;
	  int sum = 0 ;
	  for (int i = 0; i < a.length; i++) {
			for (int j = 0; j < a[i].length; j++) {
				if(a[i][j]>max){
					max = a[i][j] ;
					x = i ;
					y = j ;
				}
			}
			for (int j = 0; j < a.length; j++) {
				if(a[j][y]>max){
					sum++ ;
				}
			}
			
			if(sum>0){
				System.out.println(a[x][y]+" "+x+" "+y);
			}
			x= 0;
			y =0 ;
			sum = 0 ;
		  }
   } 
}