試題編號: 201803-1
試題名稱: 跳一跳
時間限制: 1.0s
內存限制: 256.0MB
問題描述:
問題描述ios
近來,跳一跳這款小遊戲風靡全國,受到很多玩家的喜好。
簡化後的跳一跳規則以下:玩家每次從當前方塊跳到下一個方塊,若是沒有跳到下一個方塊上則遊戲結束。
若是跳到了方塊上,但沒有跳到方塊的中心則得到1分;跳到方塊中心時,若上一次的得分爲1分或這是本局遊戲的第一次跳躍則這次得分爲2分,不然這次得分比上一次得分多兩分(即連續跳到方塊中心時,總得分將+2,+4,+6,+8...)。
如今給出一我的跳一跳的全過程,請你求出他本局遊戲的得分(按照題目描述的規則)。spa
輸入格式code
輸入包含多個數字,用空格分隔,每一個數字都是1,2,0之一,1表示這次跳躍跳到了方塊上可是沒有跳到中心,2表示這次跳躍跳到了方塊上而且跳到了方塊中心,0表示這次跳躍沒有跳到方塊上(此時遊戲結束)。blog
輸出格式遊戲
輸出一個整數,爲本局遊戲的得分(在本題的規則下)。內存
樣例輸入it
1 1 2 2 2 1 1 2 2 0io
樣例輸出class
22stream
數據規模和約定
對於全部評測用例,輸入的數字不超過30個,保證0正好出現一次且爲最後一個數字。
問題連接:CCF201803-1 跳一跳
問題分析:
一個簡單的序列處理問題。
輸入到文件結束或最後一個數爲0。
程序說明:
變量plus用於存儲加分。初值爲0,連續得2分則每次增長2分,若是得1分(沒有跳到中心)則加分變爲0分。
提交後得100分的C++語言程序以下:
/* CCF201803-1 跳一跳 */ #include <iostream> using namespace std; int main() { int a, sum = 0, plus = 0; while(scanf("%d", &a) != EOF && a) { sum += a; if(a == 1) plus = 0; else if(a == 2) { sum += plus; plus += 2; } } printf("%d\n", sum); return 0; }
下面是個垃圾......
#include <cstdio> #include <iostream> #include <algorithm> using namespace std ; // 寫了個垃圾出來......... #define LL long long /* 1表示這次跳躍跳到了方塊上可是沒有跳到中心, 2表示這次跳躍跳到了方塊上而且跳到了方塊中心, 0表示這次跳躍沒有跳到方塊上(此時遊戲結束)。 */ /* 若是跳到了方塊上,但沒有跳到方塊的中心則得到1分; 跳到方塊中心時, 若上一次的得分爲1分或這是本局遊戲的第一次跳躍則這次得分爲2分, 不然這次得分比上一次得分多兩分 (即連續跳到方塊中心時,總得分將+2,+4,+6,+8...)。 */ int main() { LL step = 0 ; LL sum = 0 ; LL up_step = 0 ; int times = 0 ; // 第幾步 bool flag = false ; while(scanf("%d", &step) && step != 0){ times ++ ; if(step == 1){ sum += 1 ; up_step = 1 ; flag = false ; }else if(step == 2&&(up_step == 1||times == 1)){ sum += 2 ; up_step = 2 ; flag = true ; }else if(flag){ up_step += 2 ; sum += up_step ; } } printf("%d\n", sum) ; return 0 ; }