201803-1 跳一跳(滿分程式碼+坑點)
阿新 • • 發佈:2019-01-23
簡化題目轉化為解題思路:
- 跳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 代表程式最後,如果寫在迴圈裡面,會導致迴圈提前結束
}