已知一个二维数组如下,每行元素加上该行主对角线元素,然后求出最大元素的下标

来源:百度知道 编辑:UC知道 时间:2024/06/06 23:29:59
#include<stdio.h>
void main()
{
int a[4][4]={{14,26,18,17},{24,8,21,37},{19,31,22,16},{7,8,11,9}};
int i,j,p1,p2,max=a[0][0];
for(j=0;j<=3;j++)
{
a[0][j]+=a[0][0];
a[1][j]+=a[1][1];
a[2][j]+=a[2][2];
a[3][j]+=a[3][3];
}
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];p1=i;p2=j;}
printf("最大元素行下标和列下标为:%d,%d",p1,p2);
}
或者是这样:
#include<stdio.h>
void main()
{
int a[4][4]={{14,26,18,17},{24,8,21,37},{19,31,22,16},{7,8,11,9}};
int i,j,p1,p2,max=a[0][0];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
a[i][j]+=a[i][i];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
if(a[i][j]>max)
{max=a[i][j];p1=i;p2=j;}
printf("最大元素行下标和列下标为:%d,%d",p1

a[i][j]+=a[i][i];
你这里把每行各元素加上对角线元素,但对角线元素也在每行包含的元素里面,导致的后果就是对角线元素都被*2,那么接下来每行所加的对角线元素并不是原来的值。譬如a[0][0]+=a[0][0];a[0][1]+=a[0][0]即a[0][1]=a[0][0]+a[0][0]。这样计算出来就是a[2][3]最大。
#include<stdio.h>
void main()
{
int a[4][4]={{14,26,18,17},{24,8,21,37},{19,31,22,16},{7,8,11,9}};
int i,j,p1,p2,max=a[0][0];
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
{
if(i!=j)
a[i][j]+=a[i][i];
}
for(i=0;i<=3;i++)
for(j=0;j<=3;j++)
{if(i==j)
a[i][j]*=2;
if(a[i][j]>max)
{max=a[i][j];p1=i;p2=j;}
}
printf("最大元素行下标和列下标为:%d,%d",p1,p2);
}