求一个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语言程序的主要内容,如果未能解决你的问题,请参考以下文章

c语言查找二维数组的鞍点 新生求助大佬

c语言编程 求鞍点

c语言编程。两个5*5矩阵相乘

c语言 求二维数组的鞍点

编写程序,建立一个5*5矩阵,其中各元素的值都是整数,取值范围为[10,50],输出这

c语言编程:一个2*3矩阵,求最大值,最小值