求二维数组的马鞍点-C程序设计-7.8习题

找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列最小。也可能没有鞍点。

下面是我做这道题时候的代码,如果有不正确的地方,还望大家多多指教。

//马鞍点:矩阵中在行上最大,列上最小的点。
#include <stdio.h>
#define ROW 10
#define COLUMN 10

int i,j,m,n;
int arr[ROW][COLUMN];

int main(){
    void maandian(int arr[ROW][COLUMN]);
    printf("请输入矩阵的行m,m<=%d\n",ROW);
    printf("m=");
    scanf("%d", &m);
    printf("请输入矩阵的列n,n<=%d\n",COLUMN);
    printf("n=");
    scanf("%d", &n);
    //为矩阵赋初值
    printf("请为矩阵的元素输入初始值:\n");
    for(i=0; i < m; i++)
    {
        for(j=0; j < n; j++)
        scanf("%d",&arr[i][j]);
    }
    //打印该矩阵
    printf("您输入的矩阵为:\n");
    for(i=0; i<m; i++)
    {
        for(j=0; j<n; j++)
            {
            printf("%4d",arr[i][j]);
            }
        printf("\n");
    }

//调用求马鞍点的函数
maandian(arr);

return 0;
}

void maandian(int arr[ROW][COLUMN]){

    int d,flag,num=0;
    for(i=0; i<m; i++){
        for(j=0; j<n; j++){
            flag=1;    //注意标记放的位置

            //要找行上最大的点,所以如果比行上的任意一个点小就跳过
            for(d=0; d<n; d++){
                if(arr[i][j]<arr[i][d])
                flag=0;
            }
            if(flag==0) continue;

            for(d=0; d<m; d++){
            if(arr[i][j]>arr[d][j]) flag=0;
            }
            if(flag==0) continue;
            //如果两个continue都没跳过,说明找到一个马鞍点
            num++;
            printf("第%d个马鞍点位于矩阵的第%d行,%d列,其值为%d\n",num,i+1,j+1,arr[i][j]);
        }
    }
    if(num==0)printf("该矩阵不存在马鞍点");
    printf("共有%d个马鞍点\n",num);
}
时间: 2024-10-29 17:14:48

求二维数组的马鞍点-C程序设计-7.8习题的相关文章

求二维数组中子数组和中最大的值,及子数组

求二维数组中子数组和中最大的值,及子数组 个人信息:就读于燕大本科软件工程专业 目前大三; 本人博客:google搜索"cqs_2012"即可; 个人爱好:酷爱数据结构和算法,希望将来从事算法工作为人民作出自己的贡献; 编程语言:C++ ; 编程坏境:Windows 7 专业版 x64; 编程工具:vs2008; 制图工具:office 2010 powerpoint; 硬件信息:7G-3 笔记本; 真言 每次着急写程序,碰到问题就头疼,头疼之后便是满满的收获,付出总有回报. 题目 求

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个

求二维数组中最大子数组的和

一.题目: 返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二:结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三:设计思路: 将二维数组的每行轮番逐次相加(包括单行)后看成一维数组,利用求

结对编程之求二维数组最大子数组和

1.题目: 返回一个二维整数数组中最大子数组的和. 2.要求: 输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样.数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 3.设计思路: 分别求出每一行的最大子矩阵,然后再两行相加,求出最大子矩阵,一直到所有的行相加,求出最大子矩阵.比较其中最大的子矩阵值,找出最大的. 4.源代码: 1 #include<iostream> 2 using nam

求二维数组的最大子数组

一.题目: n返回一个二维整数数组中最大子数组的和. 二.要求: n输入一个二维整形数组,数组里有正数也有负数. n二维数组中连续的一个子矩阵组成一个子数组,每个子数组都有一个和. n求所有子数组的和的最大值.要求时间复杂度为O(n). 三.程序源码: import java.util.Random; import java.util.Scanner; public class dd { public static void main(String[] args) { // TODO Auto-

3月31号周二课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值二

一.题目要求 1.1输入一个二维整形数组,数组里有正数也有负数. 1.2二维数组首尾相接,象个一条首尾相接带子一样. 1.3数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 1.4求所有子数组的和的最大值.要求时间复杂度为O(n). 二.结对要求 2.1两人结对完成编程任务. 2.2一人主要负责程序分析,代码编程. 2.3一人负责代码复审和代码测试计划. 2.4发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 三.设计过程 上次已经算过二维数组中

求二维数组最大子数组的和

结对开发成员:朱少辉,侯涛亮 朱少辉:负责程序分析,代码编程 侯涛亮:负责代码复审和代码测试 设计思路: 根据求一维子数组的最大子数组和的列子,把二维数组分解成若干个一维子数组,如m行n列的数组可分为(m+1)*m/2个子数组,在求每个一维数组的最大子数组和,把这些和放入一个数组中,求这个数组的最大值就是二维数组最大子数组的和.这种算法的时间复杂度为o(n^3). 代码: #include<iostream> using namespace std; void main() { int m,n

求二维数组最大子数组

结对队友:胡康臻.杨寒寒 1.设计思想: 首先定义产生二维数组,定义可输入二维数组行和列,各位数随机产生: 然后进行最大子数组的求和比较,从每行的第一个数为子数组的起点开始进行不同的子数组遍历比较,只存放最大的子数组,以及记录最大子数组的位置,从第一个数开始每行每列进行求和比较,以求得最大子数组的值,以及最大子数组所包含的数: 最后进行结果的输出与验证. 2.代码 import java.util.*; public class zuixiaozishuzu { public static vo

求二维数组环的最大的子数组的和

#include<iostream> using namespace std; void max(int row,int col) { int ** a=new int*[row+1]; int ** b=new int*[row+1]; int h;//用于每一个一维数组上已经相加元素的个数够一个环则开始下一个 for(int i=1;i<=row;i++) { a[i]=new int[2*col]; } for(int i=1;i<=row;i++) { b[i]=new i