C语言 魔王的碰碰球

题目描述

传说在遥远的过去,有一个大魔王盘踞在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次击球。

输出

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

样例输入 Copy

11111111110111001

样例输出 Copy

31

代码

#include<stdio.h>
#include<math.h>
#include<string.h>
int df(int a)
{int m;
	if(a%8==1||a%8==7||a%8==3)m=2;
	if(a%8==5||a%8==6)m=1;
	if(a%8==4||a%8==0||a%8==2)m=3;
	return m;
}
int main()
{
	char q[100000];
	int s=0, i=0,b,p=1;
	
	gets(q);

	for(i=0;i<strlen(q);i++)
	{
		if(q[i]=='1')
		{
			s=s+df(p);
			p++;
		}
		else p=1;

	}
	printf("%d\n",s);
	return 0;
}
发布了47 篇原创文章 · 获赞 29 · 访问量 1475

猜你喜欢

转载自blog.csdn.net/Qianzshuo/article/details/103759168
今日推荐