C语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。相关的知识,希望对你有一定的参考价值。
步骤简单易懂的
思路:遍历矩阵的每一行,找出最大值,在最大值对应的列找最小值,然后判断最大值和最小值的位置是否相等。具体代码如下:
#include <stdio.h>
#include<stdlib.h>
void FindSaddlePoint(int a[][20], 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(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
FindSaddlePoint(a,m,n);
system("pause");
//函数功能:输入矩阵数组、行数和列数,判断是否存在鞍点并输出结果
void FindSaddlePoint(int a[][20], int m, int n)
int i,j,k; //循环变量
int b,c,d; //储存下标:b和d储存最大值的下标,d储存最小值的下标
int flag=0; //判断是否有鞍点:值为1则有,值为0则无
int max,min; //每行中的最大值和每列中的最小值
//第一层循环遍历每一行
for(i=0;i<m;i++)
//先该行中的第一个数赋值给最大值并保存其位置
max=a[i][0];
b=i;
d=0;
//找出每一行中的最大值的值及位置
for(j=0;j<n;j++)
if(max<a[i][j])
max=a[i][j];
b=i;
d=j;
//先将找到的最大值赋值给最小值,作为初值并存储下标(由于列是一样的所以只需要储存行的位置即可)
min=max;
c=b;
//从找到的最大值中的那一列找该列的最小值并存储其位置
for(k=0;k<m;k++)
if(min>a[k][d])
min=a[k][d];
c=k;
//判断最大值和最小值的位置是否相同
if(b==c)
flag=1;
break;
//输出语句
if(flag==1)
printf("a[%d][%d] is %d\\n",b,d,max);
else
printf("No saddle point!\\n");
参考技术A #include<stdio.h>
#define N 10
#define M 10
void main()
int i,j,k,m,n,flag1,flag2,a[N][M],max,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;j<m;j++)
if(a[i][j]>max)
max=a[i][j];
maxj=j;
for(k=0,flag1=1;k<n&&flag1;k++)
if(max>a[k][maxj])
flag1=0;
if(flag1)
printf("\n第%d行第%d列的%d是鞍点\n",i,maxj,max);
flag2=1;
if(!flag2)
printf("\n矩阵无鞍点!\n");
本回答被提问者采纳 参考技术B #include "stdio.h"
#define N 10
void FindSaddlePoint(int a[][N], int m, int n);
int main()
int a[N][N];
int i, j, m, n;
printf("Input m,n:\\n");
scanf("%d,%d", &m, &n);
printf("Input matrix:\\n");
for(i=0; i<m; i++)
for (j=0; j<n; j++)
scanf("%d",&a[i][j]);
FindSaddlePoint(a, m, n);
return 0;
void FindSaddlePoint(int a[][N], int m, int n)
int i, j, k, sp, p, x, f=0;
for (i=0; i<m; i++)
p = 0;
sp = a[i][0];
for (j=1; j<n; j++)
x = 0;
if (a[i][j] > sp)
sp = a[i][j];
x = j;
for (k=0; k<m; k++)
if (sp > a[k][x])
break;
else
p++;
if (p == m)
printf("a[%d][%d] is %d\\n",i, x, sp);
f++;
if(!f)
printf("No saddle point!\\n");
参考技术C #include<iostream>
using namespace std;
int n,a[10][10];
bool max(int h,int i)
for(int m=0;m<n;m++)
if(a[h][i]>=a[h][m])
if(m==n-1)
return true;
else continue;
else break;
return false;
bool min(int h,int i)
for(int m=0;m<n;m++)
if(a[h][i]<=a[m][i])
if(m==n-1)
return true;
else continue;
else break;
return false;
int main()
int h,i,t=0;
cin>>n;
for(h=0;h<n;h++)
for(i=0;i<n;i++)
cin>>a[h][i];
for(h=0;h<n;h++)
for(i=0;i<n;i++)
if(max(h,i)&&min(h,i))
cout<<h<<" "<<i;
t++;
if(t==0)cout<<"NONE";
参考技术D 一、找到第一行的最大元素
二、判断该元素是不是所在列的最小值
寻找二维数组的“鞍点”
鞍点:该位置上的元素在该行上最大、在该列上最小。也可能没有鞍点。
1 #include <stdio.h> 2 #include <stdlib.h> 3 #define N 4 4 #define M 5 5 int main() 6 { 7 int i,j,k,maxj,max,a[N][M],flag; 8 printf("input matrix:\\n"); 9 for(i=0;i<N;i++){ 10 for(j=0;j<M;j++){ 11 scanf("%d",&a[i][j]); 12 } 13 } 14 for(i=0;i<N;i++){ 15 for(j=0;j<M;j++){ 16 printf("%5d",a[i][j]); 17 } 18 printf("\\n"); 19 } 20 for(i=0;i<N;i++){ 21 max=a[i][0];//开始时假设a[i][0]最大 22 maxj=0;//将最大数的列号存在maxj中 23 for(j=0;j<M;j++){//找出行最大值 24 if(a[i][j]>max){ 25 max=a[i][j]; 26 maxj=j;//将最大数的列号存在maxj中 27 } 28 } 29 flag=1;//假设为鞍点 30 for(k=0;k<N;k++){ 31 if(max > a[k][maxj]){//将该行最大数与同列元素相比 32 flag=0;//如果该数不是同列最小,表示不是鞍点,令flag=0; 33 continue;//跳出k的循环 34 } 35 } 36 if(flag){//flag为1表示是鞍点 37 printf("a[%d][%d]=%d\\n",i,maxj,max); 38 break;//跳出i的循环 39 } 40 } 41 if(!flag) 42 printf("not exist\\n"); 43 system("pause"); 44 return 0; 45 }
以上是关于C语言编程:找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。也可能没有鞍点。的主要内容,如果未能解决你的问题,请参考以下文章