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的一段!在线等! 展开
由键盘输入一个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的一段!在线等! 展开
展开全部
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");
展开全部
#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);
}
#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);
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询