• 网易云课堂_程序设计入门-C语言_第六章:数组_2鞍点


    2
    鞍点(5分)

    题目内容:

    给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。

    你的任务是找出A的鞍点。

    输入格式:

    输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。

    输出格式:

    对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。

    如果找不到,就输出

    NO

    题目所给的数据保证了不会出现多个鞍点。

    输入样例:

    1 7 4 1 

    4 8 3 6 

    1 6 1 2 

    0 7 8 9

    输出样例:

    2 1

    时间限制:500ms内存限制:32000kb
     
     1 #include <stdio.h>
     2 main()
     3 {
     4     int i, j, k, n, t, andian = 0;
     5     scanf("%d", &n);
     6     int a[100][100], b[100][100];
     7 
     8     for (i = 0; i < n; i++)        /* a表清零 */
     9     {
    10         for (j = 0; j < n; j++)
    11         {
    12             scanf("%d", &a[i][j]);
    13         }
    14     }
    15 
    16     for (i = 0; i < n; i++)        /* b表清零 */
    17     {
    18         for (j = 0; j < n; j++)
    19         {
    20             b[i][j] = 0;
    21         }
    22     }
    23 
    24     for (i = 0; i < n; i++)        /* 寻找每行的最大值 */
    25     {
    26         k = 0;
    27         t = a[i][0];        /* t赋值为每行的第0列 */
    28         for (j = 0; j < n; j++)
    29         {
    30             if (a[i][j] > t)
    31             {
    32                 t = a[i][j];        /* t为每行的最大值 */
    33                 k = j;        /* k赋值为最大值的所属列数 */
    34             }
    35         }
    36         b[i][k] = b[i][k] + 1;        /* 找到每行的最大值+1 */
    37     }
    38 
    39     for (j = 0; j < n; j++)        /* 寻找每列的最小值 */
    40     {
    41         k = 0;
    42         t = a[0][j];        /* t赋值为每列的第0行 */
    43         for (i = 0; i < n; i++)
    44         {
    45             if (a[i][j] < t)
    46             {
    47                 t = a[i][j];        /* t为每列的最小值 */
    48                 k = i;        /* k赋值为最小值的所属行数 */
    49             }
    50         }
    51         b[k][j] = b[k][j] + 1;        /* 找到每列的最小值+1 */
    52     }
    53 
    54     for (i = 0; i < n; i++)        /* 寻找鞍点2 */
    55     {
    56         for (j = 0; j < n; j++)
    57         {
    58             if (b[i][j] == 2)
    59             {
    60                 printf("%d %d
    ", i, j);
    61                 andian = 1;        /* 找到鞍点1 */
    62             }
    63         }
    64     }
    65 
    66     if (andian == 0)        /* 找不到鞍点0 */
    67     {
    68         printf("NO
    ");
    69     }
    70 }
  • 相关阅读:
    反射学习笔记
    路由机制
    缓存笔记
    进程和线程
    垃圾回收机制
    堆和栈
    值类型和引用类型及参数传递
    招到一个程序员很难吗?
    全面讲解:委托、事件
    struts2入门实例
  • 原文地址:https://www.cnblogs.com/denggelin/p/5414107.html
Copyright © 2020-2023  润新知