題目: 跳一跳是一款微信小游戲,游戲規則非常簡單,只需玩家要從一個方塊跳到下一個方塊,如果未能成功跳到下一個方塊則游戲結束。 計分規則如下: 1. 如果成功跳到下一個方塊上,但未跳到方塊中心,加1分 2. 如果成功跳到下一個方塊上,且剛好跳到方塊中心,則第一次加2分,此後連續跳到中心時每次遞增2分。 ...
題目:
跳一跳是一款微信小游戲,游戲規則非常簡單,只需玩家要從一個方塊跳到下一個方塊,如果未能成功跳到下一個方塊則游戲結束。
計分規則如下:
1. 如果成功跳到下一個方塊上,但未跳到方塊中心,加1分
2. 如果成功跳到下一個方塊上,且剛好跳到方塊中心,則第一次加2分,此後連續跳到中心時每次遞增2分。也就是說,第一次跳到方塊中心加2分,連續第二次跳到方塊中心加4分,連續第三次跳到方塊中心加6分,…,以此類推。
3. 如果未能成功跳到方塊上,加0分,且游戲結束
現在給出玩家一局游戲的每次跳躍情況,請計算玩家最終得分。
輸入說明
輸入為若幹個非零整數(整數個數小於1000),表示玩家每次的跳躍情況。整數之間用空格分隔,整數取值為0,1,2。0 表示未能成功跳到下一個方塊上,1 表示成功跳到下一個方塊上但未跳到方塊中心,2 表示成功跳到下一個方塊上,且剛好跳到方塊中心。輸入的數據只有最後一個整數是0,其均非零。
輸出說明
輸出一個整數表示該玩家的最終得分。
輸入樣例
1 1 2 1 2 2 2 0
輸出樣例
17
題目分析:
經過讀題,我們可以總結出如下要點:
1.“輸入若幹個整數”中這個“若幹”怎麼刻畫——解決辦法是定義數組以後,用0作為迴圈終止的條件;
2.積分規則2中說連續跳到中心時,所加的分數會等差遞增——這是本題的核心難點,我們利用迴圈來解決。
分部碼字:
第一步 定義數組,讓用戶可以從鍵盤輸入
int step[1000],i;
int score=0;
for(i=0 ; i<1000 ; i++)
{
scanf("%d",&step[i]);
if(step[i]==0) //當用戶輸入0時,進入該判斷分支,break跳出迴圈,輸入完畢
{
break;
}
}
第二步 從數組的第一個數字開始,只要沒有取到0,說明跳一跳所走的這一步一定會給總分加分,首先外層寫好迴圈
for(i=0 ; step[i]!=0 ; i++)
{
}
第三步 第一個分支:若該數組變數為1,說明符合積分規則1,總分加1分
if(step[i]==1)
{
score += 1;
}
第四步 第二個分支:若該數組變數為2,說明符合積分規則2
這裡很特殊。規則規定:連續第一次跳在中心(用戶輸入2)得2分,第二次得4分,以此類推。轉變說法,即:當前step之前用戶輸入了‘多少’個連續的‘2’,就加(‘多少’+1)*2的分數。現在,我們要將這個‘多少‘計數出來,即引入count,利用迴圈,得到該step前有多少個2。
if(step[i]==2)
{
int count=0,j;
for(j=i;step[j]==2;j--) //從該step向之前計數,遇到1時停止計數
{
count++;
}
score += 2 * count;
}
第五步 列印分數即可
第六步 整合代碼
1 #include<stdio.h> 2 int main() 3 { 4 int step[1000],i; 5 int score=0; 6 for(i=0 ; i<1000 ; i++) 7 { 8 scanf("%d",&step[i]); 9 if(step[i]==0) 10 { 11 break; 12 } 13 } 14 for(i=0 ; step[i]!=0 ; i++) 15 { 16 if(step[i]==1) 17 { 18 score += 1; 19 } 20 if(step[i]==2) 21 { 22 int count=0,j; 23 for(j=i;step[j]==2;j--) 24 { 25 count++; 26 } 27 score += 2 * count; 28 } 29 } 30 printf("%d",score); 31 return 0; 32 }