投篮c++

题目描述

小 X 刚把猜先的程序交给少年宫的小朋友就接到了健身教练的电话,教练要求他马上到中天体育馆练习投篮,之所以选择投篮这个项目,主要目的是要在帮助小 X 减肥的同时还能预防颈椎病,小 X 每次必须投满规定的积分才能结束投篮,积分规则是这样的:小 X 每投中一个球得 1 分,如果没投中但球碰到了篮框、篮板或篮网则既不得分也不扣分,如果球啥也没碰到(俗称三不沾)则倒扣 1 分,作为奖励小 X 如能连续投中 3 球则额外加 1 分,如连续投中 4 球则额外加 2 分,依次类推,即连续投中 K 球(K>=3)则额外加 K-2 分,教练每次给小X 计分都很辛苦,于是他要求小 X 设计一个能自动计分的程序,小 X 觉得这个程序也很简单,于是他把这个任务又交给了你!

输入

输入数据共有两行,第一行为一个正整数 n,表示小 X 共进行了 n 次投篮,第二行为一个由 n 个字符组成的字符串,该字符串只包含三种字符,分别是大写字母’V’,’T’,’X’,其中’V’表示投中了, ’T’表示没投中但不用扣分, ’X’表示要扣 1 分。

输出

输出一行仅有一个整数为小 X 的得分。

样例输入

8
VVVVVTXV

样例输出

8

提示

【样例解释】

小 X 先连续投中 5 个球,得到 5+3 分,其中 3 分为额外奖励到的。接着第六个球没投中也没扣分,第七个球扣了 1 分, 最后一球得 1 分, 因此答案为 8。

【数据范围】

对于 20%的数据 n<=10
另外 20%的数据不存在连续的 3 个’V’
另外 30%的数据不存在’X’

100%的数据 n<=10000

代码如下:

#include<bits/stdc++.h>
using namespace std;
long long n,k,cc=1,s;
string str;
int main(){
    cin>>n>>str;
    for(int i=0;i<n;i++){
    	if(str[i]=='V'){
    		s++;
    		if(cc==1||str[i-1]=='T'||str[i-1]=='X'){
    			while(str[i+k]=='V'){
    			    k++;
			    }
			    if(k>2) s=s+k-2;
			    k=0;
			    cc++;
			}
		}
    	if(str[i]=='X') s--;
	}
	cout<<s;
    return 0;
}

*注:第10行为了避免k重复加,如样例:VVVVVTXV

         如果没有第10行就会判断VVVVVTXV是连续进球

                                                 VVVVVTXV是连续进球

                                                 VVVVVTXV是连续进球

         其中cc==1是判断是不是第一次判断,如果是第一次判断则运行(VVVVVTXV是连续进球,而VVVVVTXV和VVVVVTXV就不是是连续进球)

         str[i-1]=='T'||str[i-1]=='X'是判断如果V在T或X的后面,是重新开始进球,也可以运行

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值