标题:寻找鞍点(行中是最大,列中是最小)
只看楼主
bug娃娃
Rank: 2
等 级:论坛游民
帖 子:101
专家分:27
注 册:2019-3-15
结帖率:95.24%
已结贴  问题点数:20 回复次数:1 
寻找鞍点(行中是最大,列中是最小)
//寻找鞍点(行中最大的,列中最小的)
#include <stdio.h>
#include <string.h>
#define P 3
void an(int (*a)[P],int row)
{
    int i,j,max,min,index1,index2,index;
    for(i = 0;i < row;i++)
    {
        max = *(*(a + i));
        index1 = i;
        index2 = 0;

        for(j = 1;j < P;j++)
        {
            if(max < *( *( a + i ) + j))
            {
                max =  *(*(a + i) + j);
                index2 = j;
            }
        }
        min = *(*(a + index2));
        index = 0;
        for(i = 1;i < row;i++)
        {
            if(min > *(*(a + i) + index2))
            {
                min = *(*(a + i) + index2);
                index = i;
            }
        }
        if(index = index1)
        {
            printf("row =  %d col = %d num = %d\n",index,index2,*(*(a + index) + index2));
        }
    }
}
int main()
{
    int i,j;
    int a[100][P],row;
    printf("请输入矩阵的行:\n");
    scanf("%d",&row);
    for(i = 0 ; i < row ; i++)
    {
        for(j = 0;j < P;j++)
        {
            scanf("%d",&a[i][j]);
        }
    }
    an(a,row);
    return 0;
}
我把行中最大的,列中最小的情况拿来试,但是出不来结果
我想去调试,但是我调试不是很会,调了半天也有什么东东出来,所以前来求教各位
搜索更多相关主题的帖子: 最小 int row index for 
2019-04-20 17:58
C基础
Rank: 6Rank: 6
等 级:侠之大者
威 望:6
帖 子:133
专家分:421
注 册:2018-10-15
得分:20 
#include <stdio.h>
#include <string.h>
#define P 3
void an(int (*a)[P],int row)
{
    int i,j,t,max,min,index1,index2,index;
    for(i=0;i<row;i++)
    {
        max=*(*(a + i));//将每一行中的第一个元素赋值给max
        index1=i;
        index2=0;
        for(j=1;j<P;j++)
        {
            if(max<*(*(a+i)+j))
            {
                max=*(*(a+i)+j);
                index2=j;
            }
        }
        min=*(*(a+i)+index2);//这里的应当是列的值为index2
        index=0;
        for(t=0;t<row;t++)//这里的循环变量要重新定义一个循环变量(我用的是t),因为如果你用i的话,经过这一层循环之后i的值就会变成row然后你的最外层循环也就不会再进行了
        {
            if(min>*(*(a+t)+index2))
            {
                min=*(*(a+t)+index2);
                index=t;
            }
        }
        if(index==index1)//还有就是这里等于号是“==”而不是“=”,“=”是赋值号(这一点比较容易错)
            printf("row =  %d col = %d num = %d\n",index,index2,*(*(a + index) + index2));
    }
}
int main()
{
    int i,j;
    int a[100][P],row;
    printf("请输入矩阵的行:\n");
    scanf("%d",&row);
    for(i=0;i<row;i++)
        for(j=0;j<P;j++)
            scanf("%d",&a[i][j]);//还有就是如果循环体和if语句中的语句体中只有一个一条语句的话,可以省略花括号,
    an(a,row);
    return 0;
}
你试试,可以输入3
               7 8 9
               6 5 16
               3 2 21


但是这个程序是不完美的,比方说还是输入3行
9 8 9
6 5 16
3 2 21
这个矩阵就得不到你想要的结果,也就是说如果在第n行中最大值不止一个,如果在这第n行中第一次出现的最大值恰好是它所在列的最小值的话,那么这个程序还是能输出的,但是如果它第一次出现的最大值不是它所在列的最小值的话这个程序就不可以了,
例如:刚才说的 9 8 9
               6 5 16
               3 2 21  这个矩阵是不可以的
但是9 8 9
    16 6 5
    21 3 2
这个矩阵就是可以输出的
2019-04-20 21:41



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-494315-1-1.html




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

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