#40499: c++(2ms, 80KB)不用陣列寫法


bobobo0413 (Andy)

學校 : 國立臺灣大學
編號 : 252359
來源 : [163.30.63.84]
最後登入時間 :
2024-11-21 13:04:23
g595. 1. 修補圍籬 -- 2021年11月APCS | From: [42.79.78.130] | 發表日期 : 2024-05-25 21:22

解題報告:這題用陣列會非常簡單,頭尾都放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;
}

 
ZeroJudge Forum