c/c++:山顶元素

embedded/2024/9/24 7:25:11/

题目描述(题目链接)

从键盘输入一个整型二维数组,遍历二维数组中的每个元素,如果此元素比其上下左右的数字都大,即为山顶元素。

输入格式

一个≥1的整数,表名是几行几列的二维数组,一个整型二维数组,数据之间都用空格分开。

输出格式

所有整型山顶元素,用空格分开。

输入输出样例

输入

5
15 39 5 15 18 
41 39 0 6 41
38 38 38 30 44
33 36 10 35 39
39 12 4 39 7

输出

41 44 39 39

说明/提示
如果输入的代表几行几列的整数≤0,输出此整数。

解题思路:

读题意,应该很容易想到深度优先遍历,从一个点对其上下左右进行遍历加以比较,注意下题目最后的说明/提示,意思是当n=0时,输出0

解题代码:

C代码:

#include<stdio.h>
#include<stdbool.h>//bool类型
int n;
int r[4]={0,0,1,-1};//左右
int c[4]={1,-1,0,0};//上下
bool fw(int row,int column)//判断是否在范围内
{return row>=0&&row<n&&column>=0&&column<n?true:false;
}
bool dfs(int a[n][n],int i,int j)
{int flag=1;for(int k=0;k<4;k++)//遍历上下左右的元素{int row=r[k]+i,column=c[k]+j;if(fw(row,column)){if(a[i][j]<=a[row][column]){flag=0;break;}}}return flag;
}
int main()
{scanf("%d",&n);if(n==0){printf("0");return 0;}int a[n][n];for(int i=0;i<n;i++)for(int j=0;j<n;j++)scanf("%d",&a[i][j]);for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(dfs(a,i,j))printf("%d ",a[i][j]);}return 0;
}

C++代码:
在C++中二维数组传参时,参数中的数组大小必须是常量,就不能像C那样随意这样a[n][n]当函数参数,除非是全局变量,全局变量也就没必要传参了

#include<bits/stdc++.h>
using namespace std;
int n;
int r[4]={0,0,1,-1};
int c[4]={1,-1,0,0};
bool fw(int row,int column)
{return row>=0&&row<n&&column>=0&&column<n?true:false;
}
bool dfs(int **a,int i,int j)//这里弄了个二级指针,还有些麻烦了
{int flag=1;for(int k=0;k<4;k++){int row=r[k]+i,column=c[k]+j;if(fw(row,column)){if(a[i][j]<=a[row][column]){flag=0;break;}}}return flag;
}
int main()
{cin>>n;if(n==0){cout<<0;return 0;}int **a=new int *[n];//二级指针的定义,我感觉还是有些麻烦的for (int i = 0; i < n; ++i) {a[i] = new int[n];}for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>a[i][j];for(int i=0;i<n;i++)for(int j=0;j<n;j++){if(dfs(a,i,j))cout<<a[i][j]<<" ";}return 0;
}

http://www.ppmy.cn/embedded/37283.html

相关文章

uniapp踩坑 uni.showToast 和 uni.showLoading

uniapp踩坑 uni.showToast 和 uni.showLoading 一、问题描述 uni.showLoading 和 uni.showToast 混合使用时&#xff0c;showLoading和showToast会相互覆盖对方&#xff0c;调用hideLoading时也会将toast内容进行隐藏。 二、触发条件 1.uniapp中使用自己封装的axois&#x…

git 更换远程仓库地址三种方法总结

git 更换远程仓库地址三种方法总结 一、前言 由于私服的 gitlab 的地址变更&#xff0c;导致部分项目代码提交不上去&#xff0c;需要修改远端仓地址。 其它需要修改远程仓地址的情况如&#xff1a;切换git clone 协议由ssh变为https。 二、环境 windows 10git version 2.3…

LY/T 3131-2019 木质拼花地板检测

木质拼花地板是指通过单元设计&#xff0c;组拼成具有特定图案的木质地板&#xff0c;按照材料组分分为实木拼花地板&#xff0c;实木复合拼花地板和浸渍纸层压拼花地板。 LY/T 3131-2019 实木拼花地板测试项目 测试项目 测试标准 含水率 GB/T 15036.2 漆膜附着力 GB/T 1…

花的花语和传说

花的花语和传说往往紧密相连&#xff0c;它们共同构成了花卉文化的丰富内涵。以下是一些常见花卉的花语和传说&#xff1a; 玫瑰&#xff1a; 花语&#xff1a;爱情、美丽、和平、友谊、勇敢、献身。传说&#xff1a;古希腊和古罗马神话中&#xff0c;玫瑰与美神阿芙洛狄忒&…

关于路由懒加载的实现

在Vue2中&#xff0c;实现路由懒加载可以使用import的动态引入方式。通常&#xff0c;我们可以将组件作为被引入的模块&#xff0c;并在routes配置中使用component: () > import(/components/Example.vue)来实现懒加载。 在Vue3中&#xff0c;懒加载的实现方式稍有不同。Vu…

25_Scala集合Tuple

文章目录 tuple1.元组定义2.Tuple元素访问3.如果元素的len2&#xff0c;称之为键值对对象&#xff0c;也称之为对偶元组4.补充上节Map5.Map集合遍历6.集合之间相互转化 tuple 概念&#xff1a;scala语言采用特殊的方式将无关的数据作为一个整体&#xff0c;组合在一起’ 1.元…

插入排序(Insertion Sort)

插入排序&#xff08;Insertion Sort&#xff09;是一种简单直观的排序算法&#xff0c;它的工作原理如下&#xff1a; 将数组分为已排序部分和未排序部分&#xff1a;初始时&#xff0c;已排序部分仅包含数组的第一个元素&#xff0c;其余元素被视为未排序部分。 从未排序部分…

Android OpenMAX(三)高通OMX组件实现基础

上一节了解了OMX组件实现的基础内容,这一节我们以高通OMX实现为例,简单看看如何实现一个OMX组件。本节代码参考自: omx_core_cmp.cpp qc_omx_component.h omx_vdec.h omx_vdec.cpp Tips:本篇文章旨在简单了解如何实现一个OMX组件,细节的内容不会仔细解读,代码阅读跳跃幅度…