HNUST-OJ-2114-魔王的碰碰球

这篇文章讲述了勇士通过击败乙护法的游戏方式获取积分,涉及字符串处理和计分规则的编程解题技巧。玩家需要理解输入的0-1序列,根据得分规则计算累积积分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

传说在遥远的过去,有一个大魔王盘踞在ACM/ICPC实验室里。

大魔王非常强大,而且他旗下有甲乙丙丁四大护法,想要见到大魔王,勇士必须一一打倒甲乙丙丁这四位护法。

这天,新的勇士带领着他的队友又一次的向实验室发起了进攻。他们在打败了甲护法之后,遇上了正在苦恼的乙护法。

乙护法见到勇士一行人后非常惊喜。其实他是一个热爱运动的人,但是自从当上了护法,只能一个人孤零零的守在位置上。

乙护法亲切的握住勇士的手,表示只要勇士能陪他打球,并且拿到一定的分数,他就直接放勇士过去。

乙护法在球场的左半场,勇士站在右半场的中心点位置。乙护法依次将球打向12345678这8个点(如图所示),八次击球都接到后继续从1开始。

已知接到1、7、3三点的球获得2分,接到5、6点的球获得1分,接到4、8、2点的球获得3分。如果某次勇士未接到球,护法会重新从1开始发球,积分持续累加。
输入:
输入一行仅由‘0’和‘1’两个字符组成的字符串s(1<=字符串长度<=106)。其中,s[i]=‘0’时表示勇士未接到护法的第i次击球,s[i]=‘1’时表示勇士接到了第i次击球。

输出:

输出一个整数,表示勇士获得的积分。

样例输入:

11111111110111001

样例输出:

31

解题思路:

将从1到8所有得分存入一个数组中(数组长度定为9),再用一个数组用来储存输入的0或1,当a[i]==1时,b[k++],当a[i]==0,k重新赋值为1。
值得注意的是k%8,当k=8时,k%8等于零。

代码实现:

#include <stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
int main()
{
    char a[200];
    gets(a);
    int b[9]= {3,2,3,2,3,1,1,2,0},i;
    int len=strlen(a);
    int k=1,sum=0;
    for(i=0; i<len; i++)
    {
        if(a[i]=='1')
        {sum+=b[k%8];
            k++;

        }
        else
        {
            k=1;
        }


    }
    printf("%d",sum);




}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值