| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5303 人关注过本帖
标题:求鞍点程序
只看楼主 加入收藏
光影门徒
Rank: 2
等 级:论坛游民
帖 子:103
专家分:28
注 册:2008-4-24
收藏
得分:0 
我昨天给做了下,结果还是有点问题,就没有给发上来,等下我回去后再做下试试。本菜鸟技术有限啊。
思路是,1.先求出没行的最大数,并用两个以为数组记录下行号和列号。在求出每列的最小值,并用另外两个一维数组记录下行号和列号。
       2.再比较记录的行号和列号,满足条件的就输出。

多看少说,重在学习!
2008-05-15 11:28
海底的龙
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2008-5-13
收藏
得分:0 
如果说一行可以有多个等值的最大值,那么当这个二维数组的所有元素等值的话,那所有的都是鞍点.如此考虑的话就变得很复杂了
2008-05-15 12:41
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
回复 14# 的帖子
LS,你写两个函数。一个是找出一行的最大值,一个是找出一行的最小值。
然后主函数调用这两个函数。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-15 12:41
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
回复 16# 的帖子
应该分别写个找求矩正行最大值和列最小值的函数吧
然后做一个循环调用它们就可以实现了
这样想法对吗?
2008-05-15 13:56
jay_love
Rank: 1
来 自:福建
等 级:新手上路
帖 子:23
专家分:0
注 册:2008-5-13
收藏
得分:0 
我写了这个程序,但运行后发现是错的,明明有鞍点却输出不存在鞍点,大家看看是哪里出问题了
#include<stdio.h>
void main()
{
    int array[5][5],i,j,max,min,a[5]={0,0,0,0,0},b[5]={0,0,0,0,0},m,n,t=0;
    printf("输入一个5×5二维数组\n");
    for(i=0;i<5;i++)
    for(j=0;j<5;j++)
    scanf("%d",&array[i][j]);
    for(i=0;i<5;i++)
        {
            max=array[i][0];
            for(j=1;j<5;j++)
            if(max<array[i][j])
            {
                max=array[i][j];
                a[i]=j;
            }

        }
        for(j=0;j<5;j++)
        {
            min=array[0][j];
                for(i=1;i<5;i++)
                    if(min>array[i][j])
                    {
                        min=array[i][j];
                        b[j]=i;
                    }
        }
        for(i=0;i<5;i++)
        {
            for(j=0;j<5;j++)
            if(a[i]=b[j])
            
            {
                m=a[i],n=b[j];
                printf("鞍点在第%d行,第%d列",++m,++n);
                printf("\n鞍点为%d",array[m][n]);
                t++;
            }
        }
        if(t==0) printf("不存在鞍点");
        printf("\n");

}
2008-05-15 14:43
qinxinhai
Rank: 1
来 自:湖南长沙
等 级:新手上路
帖 子:237
专家分:0
注 册:2008-4-27
收藏
得分:0 
假如一个这样的矩阵,鞍点的坐标也要输出
1  5  5  5  1
1  3  3  3  1
我不管怎么弄只能输出一个啊!

我秀我自己
2008-05-15 14:49
smltq
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:566
专家分:400
注 册:2008-1-21
收藏
得分:0 
不知道有没对```你试试
#include<stdio.h>
#include "stdlib.h"
#define N 5
int smax(int arrar[])  /*返回最大数的下标*/
{
    int i,maxi=0;
    for(i=1;i<N;i++)
        if(arrar[i-1]<arrar[i]) maxi=i;
    return maxi;
}
void main()
{
    int array[N][N],i,j;
    int maxi=0,min=0;
    printf("input:5*5 array\n");
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&array[i][j]);
    for(i=0;i<N;i++)
    {
        maxi=smax(array[i]);
        min=array[i][maxi];
        for(j=0;j<N;j++)
            if(min>array[j][maxi]) break;
        if(j==N) printf("%d",array[i][maxi]);   /*打印找到的鞍点*/
    }
}
2008-05-15 17:10
mqh21364
Rank: 1
等 级:新手上路
帖 子:642
专家分:0
注 册:2008-2-28
收藏
得分:0 
这个程序不但长,而且有个缺点:如果一行有两个相等的数字都是按点,它只会输出第一个。不过暂时想部到怎么改了
程序代码:
#include <stdio.h>
#include <limits.h>
#define M 5

int max(int iarray[][M], int irow, int ilen);
int min(int iarray[][M], int icol, int ilen);

/*main function*/
int main(void)
{
    int i, j, irow=0, icol=0, iarray[M][M];
    printf("Please a %d*%d array:\n", M, M);
    for (i=0; i<M; i++)
    {
        for(j=0; j<M; j++)
        {
            scanf("%d", &iarray[i][j]);
        }
    }
    for (i=0; i<M; i++)
    {
            icol=max(iarray, i, M);
            
            irow=min(iarray, icol, M);
            
            if (irow==i)
            {
                printf("i=%d; j=%d; value=%d\n", irow, icol, iarray[irow][icol]);
            }
    }
    return 0;
}

/*Find the max number in a row*/
int max(int iarray[][M], int irow, int ilen)
{
    int imax=INT_MIN, ipos, i;
    for (i=0; i<ilen; i++)
    {
        if (iarray[irow][i]>=imax)
        {
            imax=iarray[irow][i];
        }
    }
    for (i=0; i<ilen; i++)
    {
        if (iarray[irow][i]==imax)
        {
            ipos=i;
            break;
        }
    }
    return ipos;
}

/*Find the min number in a col*/
int min(int iarray[][M], int icol, int ilen)
{
    int imin=INT_MAX, ipos, i;
    for (i=0; i<ilen; i++)
    {
        if (iarray[i][icol]<=imin)
        {
            imin=iarray[i][icol];
        }
    }
    for (i=0; i<ilen; i++)
    {
        if (iarray[i][icol]==imin)
        {
            ipos=i;
            break;
        }
    }
    return ipos;
}


前不见古人,后不见来者。念天地之悠悠,独怆然而涕下。
2008-05-15 22:52
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<stdio.h>
int main()
{
    int i,j,max,min,a[5]={0,0,0,0,0},b[5]={0,0,0,0,0},m,n,t=0;
    int array[5][5]={    {1,2,5,8,9},
                        {1,2,5,5,6},
                        {1,3,4,5,8},
                        {1,2,5,4,7},
                        {5,6,5,8,9},};
    for(i=0;i<5;i++)
        {
            max=array[i][0];
            for(j=0;j<5;j++)
            if(max<array[i][j])
            {
                max=array[i][j];
                a[i]=j;
            
            }
            min=array[0][a[i]];
            for(j=0;j<5;j++)
               if(min>array[j][a[i]])
                {
                  min=array[j][a[i]];
                  b[i]=j;
                }
            printf("%d %d \n",max,min);          
            if(max==min)            
            {
                m=a[i],n=b[i];
                printf("鞍点在第%d行,第%d列",n+1,m+1);
                printf("\n鞍点为%d\n",array[n][m]);
                t++;
            }
        
        }
        if(t==0) printf("不存在鞍点");
        printf("\n");
        return 0;
}

学习需要安静。。海盗要重新来过。。
2008-05-15 23:34
liyanhong
Rank: 3Rank: 3
来 自:水星
等 级:禁止访问
威 望:8
帖 子:1867
专家分:0
注 册:2008-5-3
收藏
得分:0 
此帖不水
楼上的代码我收藏了

爱上你 是 我的错  可是离 开  又舍不得  听着你为我写的歌     好难过
如果说 我说如果  我们还 能  重新来过   不去计 较 谁对谁错  会怎么做
2008-05-15 23:36
快速回复:求鞍点程序
数据加载中...
 
   



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

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