网易云课堂_程序设计入门-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\n", i, j);
61                 andian = 1;        /* 找到鞍点1 */
62             }
63         }
64     }
65 
66     if (andian == 0)        /* 找不到鞍点0 */
67     {
68         printf("NO\n");
69     }
70 }

 

转载于:https://www.cnblogs.com/denggelin/p/5414107.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值