相关二维数组的一道OJ题
有关二维数组的一道OJ题
Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7
主要就是指针那块的问题,二维数组专递总是出错。
各位大神求解!
------解决思路----------------------
int biggest(array **p,int m,int n); -->
int biggest(array *p,int m,int n);
2维数组传递->
biggest(&a[0][0], m ,n);
max1=(*p).data;
//或者
int biggest(array p[],int m,int n);
biggest(a[0][0], m ,n);
max1=p[0].data;
Input
输入数据有多组,每组的第一行是两个整数m和n,表示应聘MM的总共的行列数,然后是m行整数,每行有n个,m和n的定义见题目的描述。
Output
对于每组输入数据,输出三个整数x,y和s,分别表示选中的MM的行号、列号和分数。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7
#include <stdio.h>
typedef struct
{
int data;
int pn;
} array;
array a[100][100];
int m,n;
int biggest(array **p,int m,int n);
int main()
{
int i,j;
int max;
while(scanf("%d%d",&m,&n)!=EOF)
{
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
scanf("%d",&a[i][j].data);
if(a[i][j].data>=0)a[i][j].pn=1;
else {a[i][j].pn=0;a[i][j].data*=-1;}
}
max=biggest((array**)a,m,n);
for(i=0;i<m;i++)
{
{
for(j=0;j<n;j++)
if(a[i][j].data==max)
{
printf("%d ",i+1);
printf("%d ",j+1);
break;
}
}
if(a[i][j].data==max)
break;
}
a[i][j].pn?printf("%d\n",max):printf("%d\n",-max);
}
return 0;
}
int biggest(array **p,int m,int n)
{
int i,max1=**p.data,j;
for(i=0;i<m;i++)
for(i=0;i<n;i++)
if(*(p+n*i+j).data>max1)max1=*(p+n*i+j).data;
return max1;
}
主要就是指针那块的问题,二维数组专递总是出错。
各位大神求解!
------解决思路----------------------
int biggest(array **p,int m,int n); -->
int biggest(array *p,int m,int n);
2维数组传递->
biggest(&a[0][0], m ,n);
max1=(*p).data;
//或者
int biggest(array p[],int m,int n);
biggest(a[0][0], m ,n);
max1=p[0].data;