AcWing 3257. 跳一跳
原题链接
简单
作者:
殇ベ_11
,
2021-02-22 13:15:12
,
所有人可见
,
阅读 255
题目描述
近来,跳一跳这款小游戏风靡全国,受到不少玩家的喜爱。
简化后的跳一跳规则如下:玩家每次从当前方块跳到下一个方块,如果没有跳到下一个方块上则游戏结束。
如果跳到了方块上,但没有跳到方块的中心则获得 1 分;跳到方块中心时,若上一次的得分为 1 分或这是本局游戏的第一次跳跃则此次得分为 2 分,否则此次得分比上一次得分多两分(即连续跳到方块中心时,总得分将 +2,+4,+6,+8…)。
现在给出一个人跳一跳的全过程,请你求出他本局游戏的得分(按照题目描述的规则)。
输入格式
输入包含多个数字,用空格分隔,每个数字都是 1,2,0 之一,1 表示此次跳跃跳到了方块上但是没有跳到中心,2 表示此次跳跃跳到了方块上并且跳到了方块中心,0 表示此次跳跃没有跳到方块上(此时游戏结束)。
输出格式
输出一个整数,为本局游戏的得分(在本题的规则下)。
数据范围
对于所有评测用例,输入的数字不超过 30 个,保证 0 正好出现一次且为最后一个数字。
样例
输入样例:
1 1 2 2 2 1 1 2 2 0
输出样例:
22
算法1
(模拟 + 贪心)
这就是一个纯模拟的题目;
对于每次输入进行操作,只要 n == 0
我们就printf("%d",ans);
并且结束程序;
难点就在如果处理每次调到中心的程序怎么写,其实很简单,先定义一个常量 k
,预先赋值为1
只要 n == 2
我们就–>k++; ans += (k - 1) * 2;
其中k - 1
这一步很重要;
但如果有一次没有跳到中心,即n == 1
我们就k = 1;ans ++ ;
,这样一来问题就迎刃而解了;
附上代码—————>>
C++ 代码
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N = 100000;
int ans,n,a,k;
int read()
{
char c = getchar();
int f = 1,x = 0;
while(!isdigit(c)){if(c == '-') f = -1;c = getchar();}
while(isdigit(c)){x=x * 10 + c - 48;c = getchar();}
return x * f;
}
int main()
{
k=1;
while(cin>>n)
{
if(n == 0)
{
printf("%d",ans);
return 0;
}
else if(n == 1)
{
k=1;
ans++;
}
else if(n == 2)
{
k++;
ans+=(k-1)*2;
}
}
}
哎呦不错哦~~~