/*找数组的鞍点*/ #include <iostream.h> #include <stdlib.h> //////////////////////////////////////typedef rowsize m;//用m,n表示数组行和列的大小 ///////////////////////////////////////////////typedef colsize n;
/*建立二维数组*/ void create_array() {int m,n,totalsize; int i,j;
cout<<"该程序目的是找出一个二维数组array[m][n]的鞍点" <<endl<<"请输入数组的行数和列数: "; cin>>m>>n; //输入行数和列数
totalsize=m*n; int *array; //指向整型的指针 int **pointer_array; //指向整型的指针的指针 array=new int[totalsize]; pointer_array=new int *[n];//为array的行指针分配内存 /*将array[index+colsize]的地址保存到数组中*/ int index=0; for(i=0;i<m;i++) {pointer_array[i]=&array[index]; index+=n; }
/*将数据输入到数组array*/ int value,val=0; for(i=0;i<m;i++) {cout<<"请输入数组的第"<<i<<"行:"<<endl; for(j=0;j<n;j++) {cin>>value; array[val]=value; ////////////////////////////////////// pointer_array[i][j]=array[val]; val++; } } cout<<endl; }
/*如果数组存在鞍点,找出;若不存在,提示*/ void find_saddle(int A[][],int m,int n) { int i,j; int itemp;//存放当前行最大值 int k,kk; int flag=0; //////////////////////////////////////////////////int A=pointer_array;
for(i=0;i<m;i++) {itemp=A[i][0]; k=0; //找该行最大值及所在列数 for(j=1;j<n;j++) if(A[i][j]>itemp) {itemp=A[i][j]; k=j;} } //一行中可能有多个相等的最大值 for(j=k;j<n;j++) if(A[i][j]==itemp) { //看该元素是否为该列最小 kk=0; while(kk<m&&A[kk][j]>=itemp) kk++; if(kk==m) { flag=1; cout<<"数组的鞍点有:"<<"A["<<i<<"][" <<j<<"]: "<<A[i][j]<<endl; } } if(!flag) cout<<"该数组无鞍点!"<<endl; }
void main() { create_array(); find_saddle(int pointer_array,int m,int n); }