【程序设计】
---------------------------------------------------------题目:对一个4×5矩阵(int型) 。要求写一个函数peakpoint,
其功能是判断一个点是否是峰点。所谓峰点是该点在它所在行和所在列是最大的。
样例:
峰点的坐标之一=(1,3)
峰点的坐标之值=9
请按任意键继续. . .
代码1如下:
#include<iostream>
using namespace std;
const int ROW=4; //行数
const int COL=5; //列数
/**********Program**********/
bool peakpoint(int *s1,int x, int y)
{
int s[ROW][COL]={0};
for(int m=0;m<ROW;m++)
for(int n=0;n<COL;n++)
{
s[m][n]=*s1;
s1++;
}
int flag1=0,flag2=0;
for(int i=0;i<ROW;i++)
{
if(s[i][y]>s[x][y])
{
flag1=1;
break;
}
}
for(int j=0;j<COL;j++)
{
if(s[x][j]>s[x][y])
{
flag2=1;
break;
}
}
if(!(flag1+flag2))
return true;
else
return false;
}
/********** End **********/
void main(void)
{
int s[ROW][COL] = {{7,2,9,4,6},{5,6,1,8,3},{9,8,6,3,9},{5,1,9,7,2}};
int i,j;
for(i=0;i<ROW;i++)
for(j=0;j<COL;j++)
if(peakpoint(&s[0][0],i,j)) {
cout<<"峰点的坐标之一=("<<i+1<<','<<j+1<<')'<<endl;
cout<<"峰点的坐标之值="<<s[i][j]<<endl;
return;
}
}
优化一下下:
(其实本来想用数组指针int (*p)[COL]来传参的,但是由于&s[0][0]是一个元素的地址,传不了)
代码2如下:
#include<iostream>
using namespace std;
const int ROW=4; //行数
const int COL=5; //列数
/**********Program**********/
bool peakpoint(int *p,int m,int n)
{
int i,j;
for(j=0;j<COL;j++)
{
if(*(p+m*COL+n)<*(p+m*COL+j))//二维数组相邻两行头尾的元素地址是连着的
return false;
}
for(i=0;i<ROW;i++)
{
if(*(p+m*COL+n)<*(p+i*COL+n))
return false;
}
return true;
}
/********** End **********/
void main(void)
{
int s[ROW][COL] = {{7,2,9,4,6},{5,6,1,8,3},{9,8,6,3,9},{5,1,9,7,2}};
int i,j;
for(i=0;i<ROW;i++)
for(j=0;j<COL;j++)
if(peakpoint(&s[0][0],i,j)) {
cout<<"峰点的坐标之一=("<<i+1<<','<<j+1<<')'<<endl;
cout<<"峰点的坐标之值="<<s[i][j]<<endl;
return;
}