| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 324 人关注过本帖
标题:错在哪?
只看楼主 加入收藏
liucs116
Rank: 2
等 级:论坛游民
帖 子:130
专家分:29
注 册:2009-11-4
结帖率:92.86%
收藏
已结贴  问题点数:5 回复次数:4 
错在哪?
问题描述

找一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小(各行、列上不存在相等的数)。鞍点最多一个,也可能不存在。

输入

第一行是测试数据的组数。以下每组数据的首行是二维数组的行数和列数(行和列的数目均不大于100),之后为二维数组。

输出

对输入的每组测试数据,如果存在鞍点,输出鞍点所在的行、列及其值;如果不存在,输出"N"

输入样例

2
2 2
1 3
3 2
3 3
11 22 33
99 33 55
44 55 66

输出样例

N
0 2 33
代码如下:
#include<stdio.h>
void saddlepoint(int a[][100])
{
    int i, j, k, max, maxj,b,c;
    int flag=0;
    for(i=0; i<b; i++)
    {
        max=a[i][0];    maxj=0;
        for(j=0; j<c; j++)
            if(a[i][j]>max)
            {
                max=a[i][j];   
                maxj=j;
            }
    }
    for(k=0; k<c; k++)
    {
        if(max>a[k][maxj])   
            break;
        else if(k==b-1)
        {
            flag=1;
            printf("%d %d %d\n", i, maxj, max);
        }
    }
    if(!flag)   
        printf("N\n");
}
int main()
{
    int i, j, a[100][100];
    int b,c,k,n;
    scanf("%d",&n);
    for(k=1;k<=n;k++)
    {
        scanf("%d %d",&b,&c);
        for(i=0; i<b; i++)
        {
            for(j=0; j<c; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }            
        saddlepoint(a);
    }
    return 0;
}
为什么输出全是N?

2009-11-09 19:22
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
我记得有人问过鞍点的问题。而且我还回答了,不过好像不太好。你搜搜看看吧。
2009-11-09 20:25
lijm1989
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:珠海
等 级:贵宾
威 望:12
帖 子:675
专家分:2844
注 册:2009-10-14
收藏
得分:2 
程序代码:
#include<stdio.h>
void saddlepoint(int a[][100],int b,int c)   //  b 和c 想传值过子函数,要么传值,要么传址, 不传的放你的程序的b,和c不知道是什么
{
    int i, j, k, max, maxj;
    int flag=0;
    for(i=0; i<b; i++)      //   是算出每一行的最大值,看他是否是列的最小值,这里不知道是不是你的失误
    {
        max=a[i][0];    maxj=0;
        for(j=0; j<c; j++)
            if(a[i][j]>max)
            {
                max=a[i][j];    
                maxj=j;
            }
    for(k=0; k<c; k++)
    {
        if(max>a[k][maxj])    
            break;
        else if(k==b-1)
        {
            flag=1;
            printf("%d %d %d\n", i, maxj, max);
        }
    }
    }
    if(!flag)    
        printf("N\n");
}
int main()
{
    int i, j, a[100][100];
    int b,c,k,n;
    scanf("%d",&n);
    for(k=1;k<=n;k++)
    {
        scanf("%d%d",&b,&c);
        for(i=0; i<b; i++)
        {
            for(j=0; j<c; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }            
        saddlepoint(a,b,c);
    }
    return 0;
}
2009-11-09 20:44
m456m654
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:783
专家分:2806
注 册:2009-9-17
收藏
得分:1 
觉得还是思路有问题。
#include<stdio.h>
void saddlepoint(int a[][100],int b,int c)
{
    int i, j, k, max, maxj,min,t=0;
    int flag=0;
    for(i=0; i<b; i++)
    {
    max=a[i][0];
    maxj=0;
    for(j=0; j<c; j++)
     if(a[i][j]>max)
            {
                max=a[i][j];
                maxj=j;
            }
    min=a[0][maxj];
    for(k=0;k<b;k++)
      if(min>a[k][maxj])
          {
             min=a[k][maxj];
            t=k;
          }
    if(a[i][maxj]==a[t][maxj])
    {
    printf("%d %d %d\n",t,maxj,a[i][maxj]);
    flag=1;
    }
    }
    if(flag==0)
    printf("N\n");
}
int main()
{
    int i, j, a[100][100];
    int b,c,k,n;
    scanf("%d",&n);
    for(k=1;k<=n;k++)
    {
        scanf("%d%d",&b,&c);
        for(i=0; i<b; i++)
        {
            for(j=0; j<c; j++)
            {
                scanf("%d", &a[i][j]);
            }
        }
    saddlepoint(a,b,c);
    }
    getch();
}
2009-11-09 21:35
hnliji1107
Rank: 4
等 级:业余侠客
帖 子:53
专家分:216
注 册:2009-10-23
收藏
得分:1 
这道题老谭的《C程序设计》第二版中附带的上机练习上有答案,记得是课后练习题
2009-11-10 09:41
快速回复:错在哪?
数据加载中...
 
   



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

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