CCF CSP 跳一跳 c++ java python 201803_1 100分
問題描述
近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。
簡化後的跳一跳規則如下:玩家每次從當前方塊跳到下一個方塊,如果沒有跳到下一個方塊上則遊戲結束。
如果跳到了方塊上,但沒有跳到方塊的中心則獲得1分;跳到方塊中心時,若上一次的得分爲1分或這是本局遊戲的第一次跳躍則此次得分爲2分,否則此次得分比上一次得分多兩分(即連續跳到方塊中心時,總得分將+2,+4,+6,+8…)。
現在給出一個人跳一跳的全過程,請你求出他本局遊戲的得分(按照題目描述的規則)。
輸入格式
輸入包含多個數字,用空格分隔,每個數字都是1,2,0之一,1表示此次跳躍跳到了方塊上但是沒有跳到中心,2表示此次跳躍跳到了方塊上並且跳到了方塊中心,0表示此次跳躍沒有跳到方塊上(此時遊戲結束)。
輸出格式
輸出一個整數,爲本局遊戲的得分(在本題的規則下)。
樣例輸入
1 1 2 2 2 1 1 2 2 0
樣例輸出
22
數據規模和約定
對於所有評測用例,輸入的數字不超過30個,保證0正好出現一次且爲最後一個數字。
問題分析
這道題是csp認證的第一題,題目比較簡單易懂,只要控制好邏輯,拿滿分是很簡單的事情。具體代碼如下
c++代碼如下:
#include<cstdio>
#include<vector>
using namespace std;
int main(){
vector<int> vec;
int temp;
scanf("%d",&temp);
while(temp != 0){
vec.push_back(temp);
scanf("%d",&temp);
}
int result = 0;
int flag = 0;
for(int i = 0;i < vec.size();i++){
int ff = vec[i];
if(ff == 1) {
result += 1;
flag = 0;
}
else {
if(flag == 0) {
flag = 1;
result += (2*flag);
}
else {
flag += 1;
result += (2*flag);
}
}
}
printf("%d\n",result);
return 0;
}
Java代碼如下:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class csp201803_1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
List<Integer> list = new ArrayList<>();
int temp = input.nextInt();
while(temp != 0) {
list.add(temp);
temp = input.nextInt();
}
int result = 0;
int flag = 0;
for(int i = 0;i < list.size();i++) {
int ff = list.get(i);
if(ff == 1) {
result += 1;
flag = 0;
}
else {
if(flag == 0) {
flag = 1;
result += (2*flag);
}
else {
flag += 1;
result += (2*flag);
}
}
}
System.out.println(result);
}
}
python3代碼如下:
if __name__=="__main__":
temp = input().split(" ")
li = []
for i in temp:
if int(i) != 0:
li.append(int(i))
result = 0
flag = 0
for i in range(len(li)):
ff = li[i]
if ff == 1:
result += 1
flag = 0
else:
if flag == 0:
flag = 1
result += (2 * flag)
else:
flag += 1
result += (2 * flag)
print(result)
ok!大功告成了,如果你有其他的方法或問題,歡迎在評論區交流!