c语言数组矩阵题目,在线等

--------------------------------------题目如下-------------------------------------------... --------------------------------------题目如下--------------------------------------------

由键盘输入一个3*4(3行4列)的矩阵,输出矩阵中的鞍点(即在矩阵行中最大,列中最小的数)。若没有鞍点,输出“NO”字样。

输入样例
87 90 110 98
70 97 210 65
98 45 120 30

输出样例

110

--------------------------------------我的代码如下-------------------------------------------
#include <stdio.h>
#include <stdlib.h>

int main()
{
int col,i,j,row,min;
int a[3][4];
int b[3];

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

for(i=0;i<3;i++){
row=i;
col=0;
for(j=0;j<4;j++){
if(a[i][j]>a[row][col]){
row=i;
col=j;
}
b[i]=a[row][col];

}
}

min=0;
for(i=1;i<3;i++){
if(b[i]<b[min]){
min=i;
}
}

printf("%d\n",b[min]);
return 0;
}

-------------------------------------------想问:---------------------------------------------
我运行过了以上代码是可以的。
就是问题里还有 “若没有鞍点,输出“NO”字样。”

我不知道没有鞍点是什么情况TAT
求大神帮我补充一下没有鞍点输出NO的一段!在线等!
展开
 我来答
TypeCodes
2014-11-16 · Beauty of programming.
TypeCodes
采纳数:67 获赞数:998

向TA提问 私信TA
展开全部

LZ应该没理解这段程序,其实很简单,数组b是用来保存a数组每行中最大的那个数,然后将这3个数比较,得到最小的那个数。所以,如果“若没有鞍点,输出“NO”字样。” 这种情况就是三个数都相等的情况。所以改正代码如下:


//是否存在鞍点的标志,默认不存在
int iIsOfAndian = 0;
for(i=1;i<3;i++){
    if(b[i]<b[min]){
        min=i;
        iIsOfAndian = 1;
    }
}

if( iIsOfAndian  )
    printf("鞍点的值等于%d\n",b[min]);
else
    printf("NO\n");
更多追问追答
追问
如果是两个数相等而且两个数都是比较小的呢?
追答

嗯,上面改的代码考虑还不周全。改正如下:

//数组b中两个数相等的次数
int iEqualTimes = 0;
for(i=1;i<3;i++){
    if( b[i]<b[min] ){
        min=i;
    }
    else if( b[i] == b[min] )
     ++iEqualTimes;
}

//如果数组b中两个数相等的次数等于所有元素的个数减去1的话,则说明所有元素都是相等的,也就是没有鞍点,否则有鞍点
if( iEqualTimes != 2  )
    printf("鞍点的值等于%d\n",b[min]);
else
    printf("NO\n");
我我挝头1
2014-11-16 · 超过61用户采纳过TA的回答
知道答主
回答量:117
采纳率:83%
帮助的人:50.5万
展开全部
#include <stdio.h>
#define N 4
#define M 5
void main()
{
int a[N][M],i,j,k,n1,n2,n3,n4;
printf("please input:");printf("\n");
for(i=0;i<N;i++)for(j=0;j<M;j++)
{scanf("%d",&a[i][j]);}
for(i=0;i<N;i++)////////
for(j=0;j<M;j++)/////需要而成循环判断
{

// if(i=0)
if(i==0)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n1=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}
//else if(i=N-1)
if(i==N-1)
{
for(k=1;k<M;k++)
{a[i][j]+=a[i][j+k];}
n2=a[i][j];
for(k=1;k<M;k++)
{a[i][j]-=a[i][j+k];}
}
//if(j=0)
if(j==0)
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n3=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}
//else if(j=M-1)
else if(j==M-1)//是==,不是=
{
for(k=1;k<N;k++)
{a[i][j]+=a[i+k][j];}
n4=a[i][j];
for(k=1;k<N;k++)
{a[i][j]-=a[i+k][j];}
}
}
printf("%d",n1+n2+n3+n4);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式