問題描述
試題編號: | 201312-3 |
試題名稱: | 最大的矩形 |
時間限制: | 1.0s |
內存限制: | 256.0MB |
問題描述: |
問題描述 在橫軸上放了n個相鄰的矩形,每個矩形的寬度是1,而第i(1 ≤ i ≤ n)個矩形的高度是hi。這n個矩形構成了一個直方圖。例如,下圖中六個矩形的高度就分別是3, 1, 6, 5, 2, 3。
輸入格式 第一行包含一個整數n,即矩形的數量(1 ≤ n ≤ 1000)。 輸出格式 輸出一行,包含一個整數,即給定直方圖內的最大矩形的面積。 樣例輸入 6 樣例輸出 10 |
解題思路:
1. 從第一個塊開始,逐漸加入塊,如果加入後值大於當前最大值,則更新最大值,直到無塊可加;
2. 然後從第二個塊開始加入,逐漸加入塊,如果加入後值大於當前最大值,則更新最大值,直到無塊可加;
3. 一直循環,全部循環之後的當前最大值,即爲全局最大值。
代碼:
#include <stdio.h>
#include <string.h>
void doit(char sign[],char (*ch)[101],int n,int flag);
void pipeiwithout(char sign[],char ch[]);
void pipei(char sign[],char ch[]);
int main() {
char sign[101],ch[100][101];
int i,flag,n;
gets(sign);
scanf("%d%d",&flag,&n);
getchar();
for(i=0;i<n;i++)
gets(ch[i]);
doit(sign,ch,n,flag);
return 0;
}
void doit(char sign[],char (*ch)[101],int n,int flag){
int l=strlen(sign);
int i,j;
if(flag==1){
for (i = 0;i< n;++i) {
pipei(sign,ch[i]);
}
}
else{
for (i = 0; i< n; ++i) {
pipeiwithout(sign,ch[i]);
}
}
}
void pipei(char sign[],char ch[]){
int f=0,i,j,ls=strlen(sign),lc=strlen(ch);
for(i=0;i<lc-ls+1;i++){
f=0;
for(j=0;j<ls;j++){
if(sign[j]==ch[i+j]){
f++;
} else{
break;
}
}
if(f==ls)
break;
}
if(f==ls){
puts(ch);
}
}
void pipeiwithout(char sign[],char ch[]){
int f=0,i,j,ls=strlen(sign),lc=strlen(ch);
for(i=0;i<lc-ls+1;i++){
f=0;
for(j=0;j<ls;j++){
if((sign[j]==(ch[i+j]-('a'-'A')))||(sign[j]==(ch[i+j]-('A'-'a')))||sign[j]==ch[i+j]){
f++;
} else{
break;
}
}
if(f==ls)
break;
}
if(f==ls){
puts(ch);
}
}
個人小結:
本代碼得分100,即通過全部測試數據,如對代碼有疑問,歡迎留言一起探討。