• CCF NOI1047 寻找鞍点


    问题链接CCF NOI1047 寻找鞍点




    时间限制: 1000 ms  空间限制: 262144 KB

    题目描述

      给定一个5*5的矩阵,每行只有一个最大值,每列只有一个最小值,寻找这个矩阵的鞍点。鞍点指的是矩阵中的一个元素,它是所在行的最大值,并且是所在列的最小值。
    例如:在下面的例子中(第4行第1列的元素就是鞍点,值为8 )。
    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8 6 4 7 2
    15 10 11 20 25

    输入

      输入包含一个5行5列的矩阵。

    输出

      如果存在鞍点,输出鞍点所在的行、列及其值,如果不存在,输出"not found"

    样例输入

    11 3 5 6 9
    12 4 7 8 10
    10 5 6 9 11
    8  6 4 7 2
    15 10 11 20 25
    样例输出

    4 1 8

    数据范围限制

     




    问题分析

      先求行的最大值和列的最小值,然后再比较找鞍点

    程序说明

      (略)

    要点详解
    • 虽然题意中给的是常量的矩阵大小,但是用宏来定义一个符号常量更为合理
    • 程序中的各个步骤要写的清晰明了



    参考链接:(略)。

    100分通过的C语言程序:

    #include <stdio.h>
    
    #define N 5
    
    int a[N][N];
    int max[N], min[N];
    
    int main(void)
    {
        int i, j;
    
        for(i=0; i<N; i++)
            for(j=0; j<N; j++)
                scanf("%d", &a[i][j]);
    
        // 设置初始值
        for(i=0; i<N; i++) {
            max[i] = -1;
            min[i] = ~((unsigned int) 0) >> 1;
        }
    
        // 求行的最大值, 列的最小值
        for(i=0; i<N; i++)
            for(j=0; j<N; j++) {
                if(a[i][j] > max[i])
                    max[i] = a[i][j];
                if(a[i][j] < min[j])
                    min[j] = a[i][j];
            }
    
        // 比较最大值和最小值,输出结果
        int flag = 1;
        for(i=0; i<N; i++)
            for(j=0; j<N; j++)
                if(max[i] == min[j]) {
                    flag = 0;
                    printf("%d %d %d
    ", i + 1, j + 1, max[i]);
                    break;
                }
    
        if(flag)
            printf("not found
    ");
    
        return 0;
    }



  • 相关阅读:
    左耳听风
    极客时间-算法
    极客时间-左耳听风阅读笔记
    涨知识
    学做饭
    开发流程
    线上问题复盘
    反思学习复习练习
    系统安全(转)
    单元测试
  • 原文地址:https://www.cnblogs.com/tigerisland/p/7563902.html
Copyright © 2020-2023  润新知