求高手帮找bug解决方案
求高手帮找bug
这是一个求鞍点的函数(鞍点就是在它所在的行跟列都是最大的数),我算法的思想是先找出某一行的最大的数,然后再用它跟它所在列所有的数相比,如果它还是最大的数的话,那它就是鞍点,函数如下:
void andian(int (* aptr)[MAXLINE])
{
int (* ptr)[MAXLINE]=aptr;
int i,j,k,n;
for(i=0;i<MAXLINE;i++)
{
j=0;
for(k=0;k<MAXLINE;k++)
{
if((*(*(ptr+i)+j))<(*(*(ptr+i)+k)))
{
j=k;
}
}
n=1;
for(k=0;k<MAXLINE;k++)
{
if((*((*(ptr+i))+j))>(*((*(ptr+k))+j)))
n++;
else break;
}
if(n==MAXLINE)
printf("鞍点找到了!!他的行标为%d,列标为%d,数值为%d\n",i+1,j+1,*(*(ptr+i)+j));
}
}
------解决方案--------------------
这是一个求鞍点的函数(鞍点就是在它所在的行跟列都是最大的数),我算法的思想是先找出某一行的最大的数,然后再用它跟它所在列所有的数相比,如果它还是最大的数的话,那它就是鞍点,函数如下:
void andian(int (* aptr)[MAXLINE])
{
int (* ptr)[MAXLINE]=aptr;
int i,j,k,n;
for(i=0;i<MAXLINE;i++)
{
j=0;
for(k=0;k<MAXLINE;k++)
{
if((*(*(ptr+i)+j))<(*(*(ptr+i)+k)))
{
j=k;
}
}
n=1;
for(k=0;k<MAXLINE;k++)
{
if((*((*(ptr+i))+j))>(*((*(ptr+k))+j)))
n++;
else break;
}
if(n==MAXLINE)
printf("鞍点找到了!!他的行标为%d,列标为%d,数值为%d\n",i+1,j+1,*(*(ptr+i)+j));
}
}
------解决方案--------------------
- C/C++ code
void andian(int (* aptr)[MAXLINE]) { int (* ptr)[MAXLINE]=aptr; int i,j,k,n; for(i=0;i<MAXLINE;i++) { j=0; for(k=0;k<MAXLINE;k++) { if((*(*(ptr+i)+j))<(*(*(ptr+i)+k))) { j=k; } } n=0; for(k=0;k<MAXLINE;k++) { if((*((*(ptr+i))+j))>(*((*(ptr+k))+j)) || k==j) n++; else break; } if(n==MAXLINE) printf("鞍点找到了!!他的行标为%d,列标为%d,数值为%d\n",i+1,j+1,*(*(ptr+i)+j)); } }
------解决方案--------------------
举个例子
- C/C++ code
#include <stdio.h> void find_saddle_point(int a[3][3]) { int i, j; for (i = 0; i < 3; i++) { int *tmp = &a[i][0]; int saddlepoint = 0; for (j = 0; j < 3; j++) { if (saddlepoint < tmp[j]) { saddlepoint = tmp[j]; } } printf("%d\n", saddlepoint); } } int main(void) { int a[3][3] = {1,3,5,23,4,6,7,8,3}; find_saddle_point(a); return 0; }