数据结构-青蛙杯棒球比赛

【题目来自灰灰考研】

青蛙题精选):.青蛙(frog)杯第一届棒球比赛开赛啦。 

你现在是一名记分员,输入一个字符串数组(比赛记录情况),按如下规则计分:

1. 如果该字符串是数字:代表当轮比赛的得分情况。 

2. 如果该字符串是“+”: 代表当轮比赛得分情况为上两轮之和。 

3. 如果该字符串是“C”: 代表上一轮得分无效。 

4. 如果该字符串是“D”:  代表当轮比赛得分为上一轮得分的两倍。 

你需要得出最后总的得分情况并返回结果。 

函数:int frogPoints(string[ ] ops,int round)  //ops 为字符串数组,round 代表总共的比赛轮数 

 

例子: 

输入: 

输出:30 

解释: 

第 1 轮得分 5 分,当前总共得分 5 分。

第 2 轮得分 2 分,当前总共得分 5+2=7 分。 

第 3 轮取消上轮得分,当前总共得分 5 分。 

第 4 轮获得上一轮双倍得分,当前总共得分 5+10=15 分。 

第 5 轮获得上两轮得分之和,当前总共得分 15+5+10=30 分。 

 

 

#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
int FrogScore(char data[], int n)
{
	/*
		想到使用栈的结构,
		遇到数字要进栈,
		遇到‘C’出栈,
		遇到‘D’要入栈一个栈顶元素二倍的元素
		遇到‘+’要入栈一个栈顶元素+栈顶元素的下一个元素的和
		
		最后全部出栈数字进行相加,即可 
	*/
	int stack[n], top = -1, tmp, score = 0;
	for(int i = 0; i < n; i++)
	{
		if(data[i] >= '0' && data[i] <='9')
		{
			stack[++top] = data[i] - '0';
		}
		else if(data[i] == 'C')
		{
			if(top >= 0)
				top--;
		}
		else if(data[i] == 'D')
		{
			stack[++top] = stack[top - 1] * 2;
		}
		else
		{
			stack[++top] = stack[top-1] + stack[top -2];
		}
	}
	while(top != -1)
	{
		score += stack[top--];
	}
	return score;
}



int main()
{
	char data[] = {'5', '2', 'C', 'D', '+'};
	int score = FrogScore(data, 5);
	cout<<"The Total Score is:"<<score<<endl; 
}

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值