标题:投篮
题目:
小 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 的得分。
题目分析:
根据题目,我们可以提取出相关信息
1.输入的次数为n(且为正整数)
2.输入的字符因用char,string等类型的单字符
3.判断字符,并处理(详情如下代码分析区)
4.输出
分析时刻:
First:
我们要先用一个字母n来记录字母的个数
此处我使用数组
则设置char arr[n];
用for循环给数组内的每一个值赋值
int n,all=0,temp=0;
cin>>n;
char arr[n];
for(int i=0;i<n;i++) cin>>arr[i];
接着我们要对数组内的每一个值进行判断
因为每当连续三次及以上进球时(即V>=3)时
都会额外增加一分
so
我们可以设置一个temp变量
每当进球(V)时 增加1;
如下图
for(int i=0;i<n;i++)
{
if(arr[i]=='V')
{
all++;
temp++;
if(temp>=3) all++;
}
}
而当字母为T,X时分别为 不扣分 和 扣分的情况时 连续中断 则 重新设置temp=0
T,X的分析如下图
for(int i=0;i<n;i++)
{
if(arr[i]=='V')
{
all++;
temp++;
if(temp>=3) all++;
}
else if(arr[i]=='T') temp=0;
else if(arr[i]=='X')
{
temp=0;
all--;
}
}
最后输出。
代码呈现
#include<bits/stdc++.h> //此处也可以使用 <iostream>标准库
using namespace std;
int main()
{
int n,all=0,temp=0;
cin>>n;
char arr[n];
for(int i=0;i<n;i++) cin>>arr[i];
for(int i=0;i<n;i++)
{
if(arr[i]=='V')
{
all++;
temp++;
if(temp>=3) all++;
}
else if(arr[i]=='T') temp=0;
else if(arr[i]=='X')
{
temp=0;
all--;
}
}
cout<<all;
return 0;
}