zoukankan      html  css  js  c++  java
  • 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

    找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

    【答案解析】

    鞍点是行上最大,列上最小的元素,因此对数组的第i元素进行如下操作:

    1. 找到该行上最大元素,用max标记,并标记该元素所在列colindex
    2. 找colindex列上最小的元素,用min标记,并标记该元素所在行号rowindex
    3. 如果max和min相等,并且最小的元素刚好是在第i行,则为鞍点

    如果所有行找完了,没有输出则没有鞍点

    【代码实现】

    #include<stdio.h>
    #define M 3
    #define N 4
    
    int main()
    {
    	int max, min, rowindex, colindex, flag = 0;
    	int array[M][N];
    	printf("请输入%d行%d列的数组:
    ", M, N);
    	for (int i = 0; i < M; i++)
    	{
    		for (int j = 0; j < N; j++)
    			scanf("%d", &array[i][j]);
    	}
    
    	for (int i = 0; i < M; ++i)
    	{
    		// 找到i行上最大的元素,记录该元素在列号colindex
    		max = array[i][0];
    		for (int j = 0; j < N; ++j)
    		{
    			if (array[i][j] > max)
    			{
    				max = array[i][j];
    				colindex = j;
    			}
    		}
    
    		// 找max所在列colindex上最小的元素,并记录其所在的行
    		min = array[0][colindex];
    		for (int j = 0; j < M; ++j)
    		{
    			if (array[j][colindex] < min)
    			{
    				min = array[j][colindex];
    				rowindex = j;
    			}
    		}
    
    		// 如果最小元素与最小元素相同,并且最小元素也在第i行,则为鞍点
    		if (max == min && i == rowindex)
    		{
    			flag = 1;
    			printf("鞍点为:%d行%d列的元素%d", rowindex, colindex, max);
    			break;
    		}
    	}
    
    	if (0 == flag)
    		printf("没有鞍点");
    	return 0;
    }
    

    【结果截屏】

    找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

  • 相关阅读:
    BZOJ3282 Tree
    [NOI2004] 郁闷的出纳员
    [HNOI2004]宠物收养所
    [HNOI2002] 营业额统计
    图论 简单学习笔记
    POJ3321 Apple tree
    [国家集训队] 聪聪可可
    POJ2976 Dropping tests
    SCOI2005 最大子矩阵
    codeforces|CF13C Sequence
  • 原文地址:https://www.cnblogs.com/inta/p/13330656.html
Copyright © 2011-2022 走看看