博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言编程练习——最大的矩形
阅读量:6245 次
发布时间:2019-06-22

本文共 1366 字,大约阅读时间需要 4 分钟。

hot3.png

一、问题描述

  在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。

例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。

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

输入格式

  第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。

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

输出格式

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

样例输入

6

3 1 6 5 2 3

样例输出

10

二、算法描述

设置变量length用于存储矩形长度,该题目需要遍历所有输入的值——例如测试案例中的第一个长方体的长度,将其与下一个长度值进行比较:若两值相等,则面积等于两面积的两倍,以此类推。若两值不等,则分情况讨论。具体代码如下:

#include 
#include 
int main(){    int *a;    int N;    //矩形的数量    scanf("%d",&N);    int i, j;    int length = 0 ;    int area = 0 ;    int maxarea = 0 ;    a = (int*)malloc(N*sizeof(int)) ;    for(i = 0;i < N;i ++)    {       scanf("%d",&a[i]);  //输入矩形的高度hi    }    for(i = 0; i < N ; i ++)    {        length = a[i];        area = length;        for(j = i;j < N;j ++)       {            if( j==i)            {                area = length;            }            else if(a[j] < length)            {                length = a[j];                area = (j-i+1) * length;            }            else if(a[j] >= length && j != i)            {                area = (j-i+1)*length;            }             if(area > maxarea)                maxarea = area;         }    }    printf("%d\n",maxarea);    free (a);    return 0;    }

转载于:https://my.oschina.net/u/2541879/blog/651947

你可能感兴趣的文章
解决java.lang.NoClassDefFoundError错误
查看>>
core文件的生成
查看>>
Python--day48--ORM框架SQLAlchemy
查看>>
图形报表部署在Linux下出现乱码解决办法
查看>>
(转)求模和求余
查看>>
异常解决com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
查看>>
DateTable导出添加时间段
查看>>
【Dart学习】-- Dart之消息循环机制[翻译]
查看>>
埃森哲杯第十六届上海大学程序设计联赛春季赛暨上海高校金马五校赛 I题 二数...
查看>>
【转】浅谈Java中的hashcode方法(这个demo可以多看看)
查看>>
Super Ugly Number
查看>>
LeetCode – Refresh – Linked List Cycle II
查看>>
设计模式第三次作业
查看>>
Iterator<Entry<String,String>> iter=map.entrySet().iterator(); 是什么意思
查看>>
VM各寄存器作用
查看>>
jupyter Notebook环境搭建
查看>>
python文件上传的三种方式
查看>>
python基础学习18----面向对象简述
查看>>
Android Browser学习三 多窗口: 展示第一个Tab的过程
查看>>
java资源下载之官网地址
查看>>