C语言中关于数组的问题

2025-04-06 12:24:21
推荐回答(2个)
回答1:

你的思路很直接,求出了每行最大和每列最小,存入到对应数组当中。
这里有点小小的问题,column是指列,row是指行,但是对应的你弄相反了,这个不是主要问题。
主要问题在于,你没有保存下标。每行最大的那个数组下标,和每列最小的数组下标并不像你所理解的那样这好用对应判断所得到的。
for(i=0;i<4;i++)
if(colum[i]==row[i])//错误就在于此,并不是对应相等,要保存下标进行比较的
{
printf("%d",colum[i]);
k++;
}

#include
int main()
{
int a[4][4],colum[4],row[4],i,j,k=0,temp,flg=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);

for(i=0;i<4;i++)
{
for(j=0,colum[i]=a[i][j];j<4;j++) //行
if(colum[i] {
colum[i]=a[i][j];
temp = j; //这里保存每行最大对应的列的下标。
}
for(j=0,row[i]=a[i][temp];j<4;j++) //进而对这个位置上的列进行比较
{
if(row[i]>a[j][temp]) //如果这个数在该列不是最小,那么就跳出
{
row[i]=a[j][temp];
flg++;
//break;
}
}
if(!flg)
{
printf("a[%d][%d] = %d\n",i,temp,a[i][temp]);
k++;
}
}
if(k==0)printf("Not have digit");
printf("\n");
return 0;
}

回答2:

#include
int main()
{
int a[4][4],colum[4],row[4],i,j,k=0;
int max, min;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<4;i++)
{
max = a[i][0];
for(j=1;j<4;j++)
{
if(max {
colum[i] = j;
}
}
}
for(i=0;i<4;i++)
{
min = a[i][colum[i]];
for(j=0;j<4;j++)
{
if(min>a[j][colum[i]])
{
break;
}
}
if (j == 4)
{
printf("%d",min);
k++;
}
}
if(k==0)
printf("Not have digit");
printf("\n");
return 0;
}