解題報告:這題用陣列會非常簡單,頭尾都放10000000即可。不用陣列的方法則需要思考遇到0才要比較前後,開頭先存rh=10000000,因為h=0的下一次才做事,所以用d=1代表要做事,d=0代表還不用做事。以及第一個和最後一個數要思考一下,第一個數是0,d=1,第一個數不是0,記錄rh=h,最後一個數是0,直接加前一次存下的數rh,不是0不做事。其他的h遇到0,則下一次會比較rh和h哪個數字較小,加上較小的數。總之,沒有陣列的方法就是訓練判斷的設計,不想燒腦就直接用陣列吧。附上C++原始碼:
#include<cstdio>
int main(){
int n,h,i,d=0,rh=10000000,ans=0;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&h);
if(i==0&&h==0)
d=1;
else if(i==(n-1)&&h==0)
ans+=rh;
else if(h==0&&d==0){
d=1;
}
else if(h!=0&&d==0){
rh=h;
}
else if(h!=0&&d==1&&rh<=h){
ans+=rh;
rh=h;
d=0;
}
else if(h!=0&&d==1&&rh>h){
ans+=h;
rh=h;
d=0;
}
}
printf("%d\n",ans);
return 0;
}