CSP 201312-3 最大的矩形【C语言】

这是我第一次尝试第三题,这次的第三题不是很难,难度大概是比较难的第二题的难度。也许考试的时候我也做不出第三题,但是也算是一种尝试吧


一、题目

1.问题描述

在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。
  在这里插入图片描述

请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。
在这里插入图片描述

2.输入格式

第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。
  第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤ hi ≤ 10000)。hi是第i个矩形的高度。

3.输出格式

输出一行,包含一个整数,即给定直方图内的最大矩形的面积。

4.样例输入

6
3 1 6 5 2 3

5.样例输出

10

二、解题思路

这道题用的是暴力搜索的方法,我将每个矩形的面积都求出来,然后找最大值
关于求矩形面积,我们用长x宽来表示;长从1到输入最大值,宽是挨着的矩形个数(每个矩形宽为1,所以个数即为宽)
注意计算矩形数量是指高度达标并且挨着的矩形数量(如果中间断了需要重新计数)
大概意思说得。。。还行吧。。。。
如果大家还是不明白,就看看代码吧
老规矩,不会可以留言


三、代码程序

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    int b[a];
    int i;
    int maxi=0;
    for(i=0;i<a;i++){
        scanf("%d",&b[i]);
        if(b[i]>maxi)
            maxi=b[i];
    }

    int max=0,j;
    int num=0;
    for(i=1;i<=maxi;i++){
        for(j=0;j<a;j++){
            if(b[j]>=i){
                num++;
            }
            else{
                if(max<num*i)
                     max=num*i;
                num=0;
            }
        }
        if(j==a){
            if(max<num*i)
                max=num*i;
        }
        num=0;  
    }
printf("%d",max);
return 0;
}

四、运行结果

在这里插入图片描述

总结

先找到高度为1的矩形中面积最大的;然后找到所有高度为2的矩形…以此类推,直到找到高度为所输入最大值的矩形
此时,面积最大值为所求的面积

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值