标题:新手自己编写的程序,为什么输入结果有问题,找了好久,都找不出错在哪里, ...
只看楼主
计算机好难啊
Rank: 1
等 级:新手上路
帖 子:33
专家分:8
注 册:2020-3-28
结帖率:25%
 问题点数:0 回复次数:7 
新手自己编写的程序,为什么输入结果有问题,找了好久,都找不出错在哪里,请大神帮帮忙
在一个二维数组b[5][4]中,找到b[i][j]元素值,即在i行中最小,且在j列中最大,有 输出下标值,没有 输出没有

#include "stdio.h"
int main()
{
    int z,k,m,i,j,flag=1,ba=0;
    int b[5][4];
    for(i=0;i<5;i++)
    for(j=0;j<4;j++)
        scanf("%d",&b[i][j]);
    for(i=0;i<5;i++)
    {
        for(j=0;j<4;j++)
        {
        for(k=0;k<4;k++)
        {if(k==j) continue;
         if(b[i][j]>b[i][k])
          break;
          else
           z=j;
        }         
        }
        for(k=0;k<5;k++)
        {if(k==i) continue;
         if(b[i][z]<b[k][z])
         {
          break;
         }
         else
         {
         m=i;
         ba=1;
         flag=0;
         }
        }
     if(ba) break;
    }
    if(flag)
        printf("No have.\n");
    else
    printf("%d\n",b[m][z]);
}
程序没问题,为什么我输入
   1 2 3 4
   2 3 4 5
   3 4 5 6
   4 5 6 7
   5 6 7 8
输出结果是  2
也不知道哪里错了,请大神帮帮忙看看,指出错误,新手上路,还有很多东西没学习到
搜索更多相关主题的帖子: 输入 for 出错 结果 编写 
2020-04-07 09:53
叶纤
Rank: 8Rank: 8
等 级:禁止访问
威 望:1
帖 子:658
专家分:848
注 册:2019-11-22
得分:0 
你这代码太挑战极限了,5个continue加break,反正我看着会短路

把学习时间浪费在混坛上是傻瓜行为,更何况自己的水平连一两都没到。
2020-04-07 10:42
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
逻辑错误且混乱,按照你的逻辑修改如下:
     for (j = 0; j < 4; j++)
        {
            for (k = 0; k < 4; k++)
            {
                if (k == j) continue;
                if (b[i][j] > b[i][k])
                    z = j;    //这里最好不要break,否则z最后可能无初值,导致程序崩溃
                else
                    z = k;    //这里要等于k,把逻辑搞反了
            }
        }
        for (k = 0; k < 5; k++)
        {
            //if(k==i) continue;  //这里不能continue,否则永远从第二行开始判断,第一行的鞍点得不到(准确地说是当前行鞍点得不到)
            if (b[i][z] < b[k][z])
            {
                break;
            }
            else
            {
                m = k;
                ba = 1;
                flag = 0;
            }
        }
        if (ba) break;

[此贴子已经被作者于2020-4-7 11:03编辑过]

收到的鲜花
  • 叶纤2020-04-07 10:56 送鲜花  1朵   附言:厉害,这都能快速找到

能编个毛线衣吗?
2020-04-07 10:53
计算机好难啊
Rank: 1
等 级:新手上路
帖 子:33
专家分:8
注 册:2020-3-28
得分:0 
回复 3楼 wmf2014
好的,谢谢大神,十分感谢,但是好像还是有点问题,按你的那个程序来,输出也有点问题,题目是找到在i行中最小,且在j列中最大的数,新手上路如有问题 请大神 多多包涵
2020-04-07 11:48
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
修改后的输出结果为4,没错啊。
我只是修改你逻辑混乱及错误部分。根据题意应该输出4所在的行列值,所以你正确的输出是:
    if(flag)
        printf("No have.\n");
    else
    printf("%d,%d\n",m,z);

能编个毛线衣吗?
2020-04-07 12:03
计算机好难啊
Rank: 1
等 级:新手上路
帖 子:33
专家分:8
注 册:2020-3-28
得分:0 
回复 5楼 wmf2014
行中最小,列中最大,比如输入
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
应该输出 5
比如
9 8 7 6
10 12 13 5
8 5 10 3
4 5 8 2
8 4 3 1
应该输出 6
 谢谢大神对我的帮助,十分感谢
  
2020-04-07 12:19
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
那就把判断列中最大的改成这样,其他还是一楼代码(红色部分为修改部分):
        for (k = 0; k < 5; k++)
        {
            //if (k == i) continue;
            if (b[i][z] > b[k][z])
            {
                break;
            }
            else
            {
                m = k;
                ba = 1;
                flag = 0;
            }
        }
        if (ba) break;
    }

能编个毛线衣吗?
2020-04-07 12:57
计算机好难啊
Rank: 1
等 级:新手上路
帖 子:33
专家分:8
注 册:2020-3-28
得分:0 
回复 7楼 wmf2014
谢谢,十分感谢。
2020-04-07 15:22



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




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

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