神奇的小鼓c++(北京海淀区比赛案例)

题目描述

小明有一个神奇的小鼓,小鼓中存储了一些能量豆,当他用左手抽鼓时,能量豆的数量会增加,当他用右手抽鼓时,能量豆的数量会减少(执行这个动作前,鼓中能量豆的数量一定超过减少数),这天小明用手拍了n下小鼓后,小鼓中的能量豆数量变为m个,请你帮小明算一下今天拍鼓前的能量豆数量。

输入

第一行,一个整数n,表示拍数次数。

接下来的n行,每行包括两个整数,第一个数为拍鼓用的手,0表示左手,1表示右手,第二个数是增加或减少的能量豆数量。

最后一行为一个整数m,表示最后能量豆的数量。

输出

一个整数,为拍鼓前的能量豆数量。

样例输入

5
0 8
0 4
1 5
0 3 
1 5
20

样例输出

15

范围

对于100%的数据,1≤n,m,x≤100

分析:

当他用左手抽鼓时,能量豆的数量会增加,当他用右手抽鼓时,能量豆的数量会减少(执行这个动作前,鼓中能量豆的数量一定超过减少数),0表示左手,1表示右手

所以当是0的时候小鼓中的能量豆会加上这一行的第2个数,否则(因为只能是0或1)会减掉这一行的第2个数

方法一:

可以运用倒推的方法,就是把上面的规则反一下(当是0的时候小鼓中的能量豆会减掉这一行的第2个数,否则会加上这一行的第2个数)

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,x[101],y[101],m;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i];
	}
	cin>>m;
	for(int i=1;i<=n;i++){
		if(x==0){
		    m=m-y;
	    }else{
		    m=m+y;
	    }
	}
	cout<<m;
	return 0;
}
方法二:

假设一开始只有0个能量豆(设s),顺着题目的意思来,最后再用m减去s即可

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
	long long n,x,y,s=0,m;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x>>y;
		if(x==0){
			s=s+y;
		}else{
			s=s-y;
		}
	}
	cin>>m;
	cout<<m-s;
	return 0;
}

当然,可能还有其他方法,那就让大家来探索吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值