201312-3最大的矩形

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
真的是有史以来最简单的第三题,因为我都整出来了。

#include<stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int h[10000];
	for(int i=0; i<n; i++){
		scanf("%d",&h[i]);
	}
	
	int maxS=0,S;
	for(int i=0; i<n; i++){
			if(maxS<h[i]) maxS=h[i];                //若最大面积不如h[i]大则替换 
			//printf("i=%d  maxS开始=%d\n",i,maxS);
			int j=i,count,countq=0,counth=0;              //每次都要将countq、counth置零 
			
			while(j>0&&h[i]<=h[j-1]){               //找到它前面有几个和它相邻的大于等于它的矩形 
				countq++;
				j--;
			}
			//printf("count前=%d\n",countq);
			
			
			j=i;
			while(j<n-1&&h[i]<=h[j+1]){            //找到它后面有几个和它相邻的大于等于它的矩形 
				counth++;
				j++;
			}
			//printf("count后=%d\n",counth);
			
			count=countq+counth;                   //前后相邻的矩形共有几个比它高(不包括自身)       
			
			if(i==0&&h[i]<=h[i+1]){                //特殊情况1:第一个矩阵只有后 
				S=h[i]*(count+1);
			    //printf("h[0] S=%d\n",S);
			}
			else if(i==n-1&&h[i]<=h[i-1]){         //特殊情况2;最后一个矩阵只有前 
				S=h[i]*(count+1);
			    //printf("h[n-1] S=%d\n",S);
			}
			else {                                  
				if(h[i]<=h[i-1]&&h[i]<=h[i+1]){   //如果前后都比h[i]高 
					S=h[i]*(count+1);
				}
				else if(h[i]<=h[i-1]){            //如果只有前面的比h[i]高 
					S=h[i]*(countq+1);
				}
				else{                             //如果只有后面的比h[i]高 
					S=h[i]*(counth+1);
				}
			}
			    
			if(maxS<S) maxS=S;                    //判断此时最大面积 
		    //printf("maxS结束=%d\n\n",maxS);
	}
	
	printf("%d",maxS);
    return 0;
}

欢迎指导交流。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值