真的是有史以来最简单的第三题,因为我都整出来了。
#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;
}
欢迎指导交流。