| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1856 人关注过本帖
标题:查找数组中鞍点的问题
只看楼主 加入收藏
取消关键字高亮
qq1920778865
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2016-10-31
结帖率:83.33%
收藏
 问题点数:0 回复次数:4 
查找数组中鞍点的问题
此为“找出一个二维数组中鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。”的一道题
下面程序遇到行和列中最值重复出现时不能输出正确结果,请问应该怎么完善?
#include<stdio.h>
int main()
{
    int a[3][3]={{1,2,3},{2,1,5},{3,6,4}},i,j,k,t,x,sum=0;
    for(i=0;i<=2;i++)
    {
        for(j=0;j<=2;j++)
        printf("%-3d",a[i][j]);
        printf("\n");
    }
    for(i=0;i<=2;i++)
    {
        k=0;
        for(j=0;j<=2;j++)
        {
            if(a[i][j]>a[i][k])
            k=j;
        }
        t=0;
        for(x=0;x<=2;x++)
        {
            if(a[t][k]>a[x][k])
            t=x;
        }
        if(i==t)
        {
            printf("%d  %d\n",t,k);
            sum=sum+1;
        }
    }
    if(sum==0)
    printf("无鞍点\n");
    return 0;
 }
搜索更多相关主题的帖子: include 元素 
2016-11-30 18:32
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
思路:每次取一个元素与一行一列比较,判断一个成立输出一个完事~再看看

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-30 21:28
ybybarty
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-11-30
收藏
得分:0 
因为每一行的最大值、每一列的最小值可能有多个,所以直接枚举每个点,判断这个点是不是所在行的最大值、所在列的最小值就可以了。
程序代码:
#include <stdio.h>
int main()
{
    int a[3][3] = {{1, 2, 3}, {2, 1, 5}, {3, 6, 4}}, i, j, k, sum = 0;
    for(i = 0; i <= 2; i++) {
        for(j = 0; j <= 2; j++)
            printf("%-3d", a[i][j]);
        printf("\n");
    }
    for(i = 0; i <= 2; i++) {
        for(j = 0; j <= 2; j++) {
            int f = 1;
            for (k = 0; k <= 2; k++)
                if(a[i][j] < a[i][k]) f = 0;
            for (k = 0; k <= 2; k++)
                if(a[i][j] > a[k][j]) f = 0;
            if (f) {
                printf("%d %d\n", i, j);
                sum += f;
            }
        }
    }
    if(sum == 0)
        printf("无鞍点\n");
    return 0;
}


[此贴子已经被作者于2016-11-30 22:33编辑过]


手把手带你学习 C 语言,网址:http://suo.im/1u2PvQ
2016-11-30 22:19
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
程序代码:
#include<stdio.h>
#define N 3
#define M 3
int min(int a[][M],int k)
{
    int i,j;
    for (i=j=0;i<M;i++)
        if (a[k][i]<a[k][j])
            j=i;

    return (a[k][j]);
}
int max(int a[][M],int k)
{
    int i,j;
    for (i=j=0;i<N;i++)
        if (a[i][k]>a[j][k])
            j=i;

    return (a[j][k]);
}
int main()
{
    int a[N][M];
    int b[N],c[M];
    int i,j,flag=0;

    for (i=0;i<N;i++)
        for (j=0;j<M;j++)
            scanf("%d",&a[i][j]);

    for (i=0;i<N;i++)    
        b[i]=min(a,i);
    
    for (i=0;i<M;i++)
        c[i]=max(a,i);

    for (i=0;i<N;i++)
        for (j=0;j<M;j++)
            if (a[i][j]==b[i]&&a[i][j]==c[j])
            {    
                printf("a[%d][%d] %4d\n",i,j,a[i][j]);
                flag=1;
            }

    if (flag==0)
        printf("没有鞍点\n");

    return 0;
} 

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-11-30 23:07
qq1920778865
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2016-10-31
收藏
得分:0 
谢谢啦,怎么不能结帖?

额0分贴不用结帖,尴尬

[此贴子已经被作者于2016-12-1 08:45编辑过]

2016-12-01 08:39
快速回复:查找数组中鞍点的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.187171 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved