数据结构 栈 郊游

郊游//这篇答案好像是有问题的,大家还是不要看了

题目描述

摩乐乐和他的朋友想出去郊游,他们现在有n座山(排成一行)可以选择,并且每座山的山顶都有独一无二的风景。当爬上某座山的山顶时,除了可以欣赏这座山本身的风景,还可以欣赏其他山顶的风景(只能看到比这座山高的风景,且因为视野影响可能只能看到高度单调递增的地方)。现在给出n座山的高度,请计算出爬上每座山的可以欣赏的风景的数量供摩乐乐和他的朋友选择。

输入格式

第一行 一个整数n

第二行 n个整数 表示每座山的高度

输出格式

一行n个整数 表示每座山可以看到的风景数量

数据规模

代码如下:小白写代码,如有错误,望请指正!

#include<stdio.h>

#include<stdlib.h>

typedef struct astack

{

    int top,maxtop,num;

    int *data;

}astack;

typedef struct astack *Stack;

Stack StackInit(int size)

{

    Stack S=(Stack)malloc(sizeof *S);

    S->data=(int*)malloc(size*sizeof(int));

    S->maxtop=size;

    S->top=-1;

    S->num=0;

    return S;

}

void Push(int x,Stack S)

{

        S->data[++S->top]=x;

        S->num++;

}

int main()

{

    int size,i=0,j=0,k=0,a[100001]={0},b[100001]={0};

    scanf("%d",&size);

    for(i=0;i<size;i++)

    {

        scanf("%d",&a[i]);

    }

    for(i=0;i<size;i++)

    {

        int temp=a[i];

        Stack S=StackInit(size);

        Push(temp,S);

        for(j=i-1;j>=0;j--)

        {

         if(a[j]>S->data[S->top])

            {

                Push(a[j],S);

            }

        }

        for(k=i+1;k<size;k++)

        {

            if(k==i+1&&a[k]>temp)

            {

                Push(a[k],S);

            }

            else if(a[k]>(S->data[S->top]))

            {

                Push(a[k],S);

            }

        }

        b[i]=S->num;

        free(S->data);

        free(S);

    }

    printf("%d",b[0]);

    for(i=1;i<size;i++)

    {

        printf(" %d",b[i]);

    }

    return 0;

}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值