实验7-2-3 求矩阵的局部极大值 (15分)

给定M行N列的整数矩阵A,如果A的非边界元素A[i][j]大于相邻的上下左右4个元素,那么就称元素A[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:
输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

输出格式:
每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

输出样例1:

9 2 3
5 3 2
5 3 4

输入样例2:

3 5
1 1 1 1 1
9 3 9 9 1
1 5 3 5 1

输出样例2:

None 3 5

方案一:一维数组

//求矩阵的局部极大值
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int m,n;
int i,j,k;
int *a;
int noExist = 1;
scanf("%d%d", &m, &n);
a = (int*)malloc(sizeof(int)*m*n);
for(i=0;i<m*n;i++){
scanf("%d", &a[i]);
}
for(i=1;i<m-1;i++){ //从矩阵的第二行开始,到倒数第一行结束
for(j=1;j<n-1;j++){ //从矩阵的第二列开始,到倒数第一行结束
k = n*i+j;
if(a[k]>a[k-1] && a[k]>a[k+1] && a[k]>a[k-n] && a[k]>a[k+n]){//判断是否满足局部最大
printf("%d %d %d\n", a[k], i+1, j+1);
noExist = 0;
}
}
}
if(noExist)printf("None %d %d", m, n);//在循环中没有发现有局部最大值,输出None
free(a); return 0;
}

方案二:二维数组
在此方案中,需要用到二级指针,
定义int*类型的指针存储矩阵某一行的元素
定义int**类型的指针存储指针的地址

//求矩阵的局部极大值
#include <stdio.h>
#include <stdlib.h> int main(void)
{
int m,n;
int i,j;
int **a; //二级指针,指向指针的指针
int *b;
int key;
int noExist = 1;
scanf("%d%d", &m, &n);
a = (int**)malloc(sizeof(int*)*m);
for(i=0;i<m;i++){
b = (int*)malloc(sizeof(int)*n); //申请一个m个int大小的空间
a[i] = b; //将b的地址写进a
for(j=0;j<n;j++){
scanf("%d", &b[j]);
}
}
for(i=1;i<m-1;i++){ //从矩阵的第二行开始,到倒数第一行结束
for(j=1;j<n-1;j++){ //从矩阵的第二列开始,到倒数第一列结束
b = a[i];
key = b[j];
if(key>b[j-1] && key>b[j+1]){
b = a[i-1]; //切换到上一行
if(key>b[j]){
b = a[i+1]; //切换到下一行
if(key>b[j]){
printf("%d %d %d\n", key, i+1, j+1);
noExist = 0;
}
}
}
}
}
if(noExist)printf("None %d %d", m, n); 在循环中没有发现有局部最大值,输出None
for(i=0;i<m;i++){ //释放申请的空间
b = a[i];
free(b);
}
free(a); return 0;
}

PTA实验7-2-3 求矩阵的局部极大值 (15分)的更多相关文章

  1. PTA习题6-8 统计一行文本的单词个数 (15分)

    参考<c和指针>里面运用strtok函数打印空白标记符(如\n,\t)的程序改写而成的代码 在之前我自己写了一个60行的链表版本的统计程序 相比之下这个strtok函数的程序要简洁明了的多 ...

  2. PTA实验报告(循环 数组 函数)

    一.循环PTA实验作业 题目一.7-2 求平方根序列前N项和 1.本题PTA提交列表 2.设计思路 本题调用了sqrt数学函数计算平方根,其次只用了一层循环,计算平方根之后使用循环累加计算总和sum. ...

  3. SDUT-2130_数据结构实验之数组一:矩阵转置

    数据结构实验之数组一:矩阵转置 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 数组--矩阵的转置 给定一个m*n的矩阵 ...

  4. POJ 1151 Atlantis(经典的线段树扫描线,求矩阵面积并)

    求矩阵的面积并 采用的是区间更新 #include <iostream> #include <stdio.h> #include <string.h> #inclu ...

  5. HDU 1828 / POJ 1177 Picture (线段树扫描线,求矩阵并的周长,经典题)

    做这道题之前,建议先做POJ 1151  Atlantis,经典的扫描线求矩阵的面积并 参考连接: http://www.cnblogs.com/scau20110726/archive/2013/0 ...

  6. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  7. C语言第一次实验报告————PTA实验1.2.3内容

    一.PTA实验作业 题目1.温度转换 本题要求编写程序,计算华氏温度100°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代 ...

  8. 一、PTA实验作业

    一.PTA实验作业 1.题目1: 6-2 线性表元素的区间删除 2. 设计思路 定义i,j; 判断L,minD,maxD; while(i<l->Last) { 判断所有满足条件的数,de ...

  9. POJ 1151 Atlantis 求矩阵面积并 扫描线 具体解释

    题意: 给定n个矩阵的左下角和右上角坐标,求矩阵面积并(矩阵总是正放的,即与x轴y轴都平行) 思路: 扫描线裸题 http://www.cnblogs.com/fenshen371/p/3214092 ...

随机推荐

  1. Mybatis-技术专区-如何清晰的解决出现「多对一模型」和「一对多模型」的问题

    前提介绍 在mybatis如何进行多对一.一对多(一对一)的多表查询呢?本章带你认识如何非常顺滑的解决! 基础使用篇 一对一 association association通常用来映射一对一的关系,例 ...

  2. Excel vba call Python script on Mac

    How can I launch an external python process from Excel 365 VBA on OSX? It took me a while, but I fig ...

  3. eclipse的C/C++开发搭建

    环境 宿主机:ubuntu 16.04 交叉编译:gcc-linaro-4.9-2014.11 ubuntu自带源 eclipse 安装(想使用新版直接跳过) 安装eclipse sudo apt-g ...

  4. java 使用匿名内部类实现多线程的创建

    匿名内部类的作用:简化代码 把子类继承父类,重写父类的方法,创建子类对象合一步完成 把实现类实现类接口,重写接口中的方法,创建实现类对象合成一步完成 匿名内部类的最终产物:子类/实现类对象,而这个类没 ...

  5. SNMP协议之序言

    最近两周公司分配一个任务:使用snmp协议做一个网管,来配置我们的产品.这可以说是我第一次听说这个协议,我问了一下周围的同事这是个什么协议,同事说"简单网络管理协议",其实这个协议 ...

  6. CSS002. 字体穿透蒙层(用img设置字体的color)

    之前在逛Apple Store时看到了下面的UI: 交互图标非常圆滑上手也很舒服,虽然背景底色本就是白底,但是只依赖css能不能使  "+" 穿透背景看到底色 ? 大致思路如下: ...

  7. k8s资源管理(基础操作)

    1. 基础 本文实操基于k8s 1.22.1 # 可以查看资源分配情况 kubectl describe node # 全局资源情况查看 kubectl api-resources 1.1 apply ...

  8. <input type="file">如何实现自定义样式

    利用样式覆盖来实现效果:先看下原本和改变后的样式 1 <!doctype html> 2 <html> 3 <head> 4 <title>file自定 ...

  9. Docker安装Nginx(含:Windows启动、重启、停止)

    Docker安装Nginx #docker pull nginx:latest (第一次启动Docker-Nginx) #docker run --detach \ --publish 80:80 \ ...

  10. 消息队列之 kafka 集群搭建

    我们先弄清楚kafka集群环境首先需要些什么 JDK 10+ Zookeeper Kafka 2.x 首先准备三台虚拟机 centos7 ,更改IP地址为静态地址分别为,29.30.31 cd /et ...