c/c++:山顶元素

发布于:2024-05-08 ⋅ 阅读:(24) ⋅ 点赞:(0)

题目描述(题目链接)

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

输入格式

一个≥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;
}

网站公告

今日签到

点亮在社区的每一天
去签到