C++找出二维数组的所有鞍点。所谓鞍点就是在该位置上的元素在该行上最大,在该列上最小。

如题所述

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 5
#define N 4
struct COORDINATE{
int x;
int y;
int sts;
}std[M];
int max_ary(int ary[M][N],int row,int length)
{
int i;
int tmp;
int rst;
rst = 0;
tmp = ary[row][0];
for(i=1;i<length;i++){
if(tmp<ary[row][i]){
rst = i;
tmp = ary[row][i];
}
}
return rst;
}
int min_ary(int ary[M][N],int cel,int length)
{
int i;
int tmp;
int rst;
rst = 0;
tmp = ary[0][cel];
for(i=1;i<length;i++){
if(tmp>ary[i][cel]){
rst = i;
tmp = ary[i][cel];
}
}
return rst;
}
int main(void) {
int i;
int x,y;
int ary[M][N]={{2,2,3,4},
{2,3,4,5},
{6,4,0,5},
{2,5,6,7},
{2,6,7,8}};

memset(std,0,sizeof(std));

for(i=0;i<M;i++){
std[i].x = max_ary(ary,i,N);
std[i].y = i;
}
for(i=0;i<M;i++){
if(std[i].y==min_ary(ary,std[i].x,M)){
std[i].sts = 1;
}
}
for(i=0;i<M;i++){
if(std[i].sts == 1){
x = std[i].x;
y = std[i].y;
printf("the Row=%d,Cel=%d,data=%d\n",y,x,ary[y][x]);
}
}
return EXIT_SUCCESS;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-12-08
随手写了个,可能有误,思路供你参考,希望有所收获。

void count(char [M][N]org) //M行,N列
{
int row[N],col[M];
int rCount = cCount = 0;
for(int i = 0 ; i < M-1 ; i++ ) //找出每行最大的
{
int cNum = 0;
int temp = [i][0];
for(int j = 1 ; j < N-1 ; j++ )
{
if(org[i][j]>temp)
{
temp = org[i][j];
cNum = j;
}
}
row[rCount++] = cNum;
}

for(int j = 0 ; j < N-1 ; j++ ) //找出列最小的
{
int rNum = 0;
int temp = [0][j];
for(int i = 1 ; i < M-1 ; i++ )
{
if(org[i][j]<temp)
{
temp = org[i][j];
rNum = j;
}
}
col[cCount++] = rNum;
}

for(int i = 0 ; i < M ; i++) //找出行中最大的恰好是列中最小的
if(col[row[i]] == i)
cout<<"第"+i+"行,第"+row[i]+"列为鞍点";

}本回答被网友采纳

C++找出二维数组的所有鞍点。所谓鞍点就是在该位置上的元素在该行上最...
include <stdio.h> include <stdlib.h> include <string.h> define M 5 define N 4 struct COORDINATE{ int x;int y;int sts;}std[M];int max_ary(int ary[M][N],int row,int length){ int i;int tmp;int rst;rst = 0;tmp = ary[row][0];for(i=1;i<length;i++){...

...鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有...
int m, int n);main(){int a[20][20]; \/\/数组储存矩阵int m,n; \/\/分别表示矩阵的行数和列数int i,j; \/\/循环变量\/\/人机交互输入数据printf("Input m,n:\\n");scanf("%d,%d",&m,&n);printf("Input matrix:\\n" );for...

...的鞍点,即该位置上的元素在该行上最大,在该列上最小,
int[] nos = new int[3,4];\/\/...int xMaxIndex = 0;bool isFind = false;for (int i = 0; i < nos.Rank; i++){ for (int j = 1; j < nos.Length\/(nos.Rank +1); j++){ if (nos[i, j] > nos[i, j - 1])xMaxIndex = j;} bool isMin = true;for (int k...

C++程序,在二维数组中找出鞍点鞍点是指某元素值在该行中最大.在该列...
cout<<*min_element(maxint.begin(),maxint.end());

...的中的鞍点,即该位置上的元素在该行上最大,该列上最小,也可能没有...
main(){ int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};int i,j,k,flag=1;for(i=0;i<3;i++){ k=0;for(j=1;j<4;j++)if(a[i][k]<a[i][j])k=j;for(j=0;j<3;j++)if(a[i][k]>a[j][k])flag=0;if(flag){ printf("%d\\n",a[i][k]);break;} ...

...的鞍点。即该位置上的元素在该行上最大,在该列上最小,也可能没有...
\/\/求一个m*n矩阵的鞍点,将位置下标存储在i,j,返回值为鞍点的值 \/\/若找不到鞍点,返回0,同时将i,j置为-1 \/\/注意:这里将二维数组当成一维传入,是为了方便处理 \/\/因为C++对二维数组作函数参数有限制 \/\/要访问a的第i行j列元素,使用a[i*n+j]来访问 \/\/数组元素下标从0开始,而不是1 i...

...鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有...
{ int i,j,k,m,n,flag1,flag2,a[N][M],max,maxi,maxj;printf("输入行数n:");scanf("%d",&n);printf("\\n输入列数m:");scanf("%d",&m);for(i=0;i<n;i++)for(j=0;j<m;j++)scanf("%d",&a[i][j]);flag2=0;for(i=0;i<n;i++){ max=a[i][0];for(j=0...

...个二维数组的鞍点,即该位置上的元素在该行上最大、该列上最小,也...
对每一行进行扫面 把该行上最大的值存起来 然后对于这个数字 判断是不是所在列最小的 如果是就保留 不是就删掉 这样最后有就输出 没有就给个no

...中的鞍点,即该位置上的元素在该行上最大,在该列上最小。也可能没有...
if(o!=p){ printf("第%d无鞍点",o); o前面的逗号不是英文状态的,太粗心了

【C++】大神求助,计算鞍点
include <iostream> using namespace std;int main(){ int m=0,n=0,p=0,q=0,max=0,min=0;int i=0,j=0,count=0;cin>>m;cin>>n;int** arr=new int*[m];for(i=0;i<m;i++){ arr[i]=new int[n];}\/\/从队上申请一个二维数组m行n列 for(int i=0;i<m;i++){ for(...

相似回答