1. 程式人生 > >201803-1 跳一跳(滿分程式碼+坑點)

201803-1 跳一跳(滿分程式碼+坑點)

原題目如下

簡化題目轉化為解題思路:

  • 跳1得1
  • 跳0得0
  • 聯絡跳2則累加為2,4,6….(第i個連續的2即2*i)

問題分解

-只有一個核心問題,當遇到連續的2時該怎麼加?

  • 其實很簡單,遇到第一個‘2’時則標記出當前‘2’元素的i座標,然後裡面巢狀while迴圈,重新用另一個變數往前倒著遍歷,只要還是2就增加2,這樣,每一個2到這裡都會往前遍歷。

while迴圈

while迴圈是一種基本迴圈語句,當滿足迴圈條件滿足時進行迴圈並執行迴圈體,否則跳過迴圈不執行—— [ 維基百科 ]

主要迴圈–2的連加

程式碼塊語法遵循標準markdown程式碼,例如:

sum=arr[0
]; for(i=1;i<n;i++) { if(arr[i]==1) sum+=1; else if(arr[i]==2) { j=i-1; sum+=2; while(arr[j]=2) { sum+=2; j--; } } }

全部程式碼

#include<stdio.h>
//#inlcude<string.h>
void showsc(int arr[],int n) { int i=0,sum=arr[0],j=0,p=1; for (i=1;i<n;i++) { if(arr[i]==1) { sum+=1; } if(arr[i]==2) { j=i-1; sum+=2; while(arr[j]==2) { sum
+=2; j--; } } } printf("%d\n",sum); } int main() { int arr[30]; printf("34 %d\n",arr[8]); int i; for(i=0;arr[i]!=0;i++) { scanf("%d",&arr[i]); } printf("輸出長度 %d\n",i); showsc(arr,i); return 0; //return 代表程式最後,如果寫在迴圈裡面,會導致迴圈提前結束 }