关闭

C语言入门-第七周:作业02

标签: c语言
103人阅读 评论(0) 收藏 举报
分类:

2鞍点(5分)

题目内容:
给定一个n*n矩阵A。矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数。一个矩阵A也可能没有鞍点。
你的任务是找出A的鞍点。

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

输出格式:
对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。
如果找不到,就输出
NO
题目所给的数据保证了不会出现多个鞍点。

输入样例:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例:
2 1
时间限制:500ms内存限制:32000kb

#include <stdio.h>
#include <Windows.h>

int main() {

    int num[100][100] = { 0,0 };

    int n = 0;
    scanf_s("%d", &n);

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf_s("%d", &num[i][j]);
        }
    }

    int flag = 0;//判断是否有靶点
    for (int i = 0; i < n; i++) {
        int max = num[i][0];

        //找出行上最大值。此处有拓展,可判断是否有多个靶点。
        for (int j = 0; j < n; j++) {
            if (num[i][j] > max)    max = num[i][j];
        }
        //如果当前值等于行最大值,则检查是否为列最小值
        for (int j = 0; j < n; j++) {
            if (num[i][j] == max) {

                int min = num[i][j];
                //找出列的最小值
                for (int l = 0; l < n; l++) {
                    if (num[l][j] < min) min = num[l][j];
                }
                if (num[i][j] == min) {
                    //printf("存在靶点:%d,坐标:%d %d\n", num[i][j], i, j);
                    printf("%d %d\n", i, j);
                    flag = 1;
                }

            }
        }
    }

    if (flag == 0)printf("NO\n");

    system("pause");
    return 0;
}
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:2902次
    • 积分:204
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档