求一个5×5矩阵马鞍点的C语言程序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个5×5矩阵马鞍点的C语言程序相关的知识,希望对你有一定的参考价值。
//希望我的回答对你的学习有帮助#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
int a[5][5];
srand(unsigned(time(NULL))); //随机种子
while (1)
int sign;
printf("Please input a not 0 integer !\\n");
scanf("%d", &sign);
if (sign == 0) break; //如果输入 0 ,结束程序
int SaddleCount = 0; //记录鞍点的个数
printf("\\nThe 5 * 5 int array is : \\n");
for (int i = 0; i < 5; i++) //随机生成一个 5 * 5 的数组
for (int j = 0; j < 5; j++)
a[i][j] = rand() % 100; //随机范围是 0 ~ 99
printf("%4d", a[i][j]);
printf("\\n");
for (int i = 0; i < 5; i++)
int max = a[i][0], max_x = i, max_y = 0;
for (int j = 1; j < 5; j++) //寻找一行中最大的数,并记录列数
if (max < a[i][j])
max = a[i][j];
max_y = j;
int min = a[i][max_y], k;
for (k = 0; k < 5; k++) //判断这行最大的数,在它所在的列是否为最小的数
if (a[i][max_y] > a[k][max_y]) break; //如果不是,跳出循环,此时 k 一定小于 5
if (k == 5) //如果 k 为 5,证明这行最大的数为这列中最小的数
SaddleCount++;
printf("The %d saddle point is : a[%d][%d]->%d\\n", SaddleCount, i + 1, max_y + 1, a[i][max_y]);
if (SaddleCount == 0) //如果鞍点个数为 0 ,证明这个数组不存在鞍点
printf("The 5 * 5 int array is no saddle !\\n\\n");
return 0;
参考技术A #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define M 50
#define N 50
int main(void)
int i,j,k,T,max,jmax,flag,f;
int a[M][N],m,n;
srand((unsigned)time(NULL));
scanf("%d",&T); // 测试次数
while(T--)
scanf("%d%d",&m,&n); // 二维数组维度
for(i = 0; i < m; ++i) // 产生二维数组元素
for(j = 0; j < n; ++j)
a[i][j] = rand()%1000;
printf("%04d ",a[i][j]);
printf("\\n");
f = 1;
for(i = 0; i < m; ++i)
max = a[i][0];
jmax = 0;
for(j = 1; j < n; ++j) // 找出i行最大的
if(max < a[i][j])
max = a[i][j];
jmax = j; // 且记录所在的列坐标
flag = 1; // 预置标志
for(k = 0; k < m && flag; ++k) // 判断max是否为所在列最小的
if(a[k][jmax] < max) // 不是
flag = 0; // 则清标志
if(flag == 1) // 有鞍点
printf("鞍点:a[%d][%d] = %d\\n",i,jmax,a[i][jmax]);
f = 0;
//break;
if(f) printf("没有鞍点。\\n"); // 没有鞍点
return 0;
参考技术B //一下操作前提均为数组的顺序存储
//=============定义结构体=============
#define MAX_ARRAY_DIM 8
typedef struct
int *base;
int dim;
int *bounds;
int *constants;
*Array,array;
//=============寻找矩阵m*n中的马鞍点=============
//=============时间复杂度为O(m*n)=============
void SaddlePoint(Array array1)
int min_temp=array1->base[0],max_temp=0;
int m=1,n=1,row=array1->bounds[0],col=array1->bounds[1];
int min[row+1],max[col+1];
int point_num=0,flag=0;
for(int i=0;i<row*col;)
if(array1->base[i]<min_temp) min_temp = array1->base[i];
++i;
if(i%col==0||i==row*col-1) min[m] = min_temp,min_temp=array1->base[i],++m;
for(int i=0;i<col;++i)
max_temp = 0;
for(int k=0;k<row;++k)
if (array1->base[i] > max_temp) max_temp = array1->base[i];
i += col;
max[n] = max_temp,n++;
for(int i=0;i<=row*col;i++)
m = (1 + i / col), n = (1 + i % col);
if(flag==1)
if(array1->base[i]!=point_num) continue;
else if(min[m]==max[n]) printf("data[%d][%d]= %d\\n", m, n, point_num);
else if (array1->base[i] == min[m] == max[n])
point_num = array1->base[i];
printf("data[%d][%d]= %d\\n", m, n, point_num);
flag = 1;
以上是关于求一个5×5矩阵马鞍点的C语言程序的主要内容,如果未能解决你的问题,请参考以下文章