3个空瓶换一瓶。 4个瓶盖换一瓶。 问已购买n瓶饮料,一共能喝到多少瓶饮料?

今天在吉首大学2019年程序设计竞赛(重现赛)中遇到的题,记录一下。
3个空瓶换一瓶。
4个瓶盖换一瓶。
问已购买n瓶饮料,一共能喝到多少瓶饮料?
输入描述:
第一行一个正整数T(0<T<=100)
随后T行,每行一个整数n(0<=n<=1000000)
输出描述:
T行,每行一个整数表示结果。
示例1
输入
复制
3
1
2
10
输出
复制
1
2
22

#include<iostream>
#include<stack>
using namespace std;
int main ()
{
	stack<int>st,sp;
	int n,t,sum=0,p1=0,p2=0;
	scanf("%d",&t);
	while(t--){
		sum=p1=p2=0;
		scanf("%d",&n);
		sum+=n;
		st.push(n);//空瓶 
		sp.push(n);//瓶盖 
		while(!st.empty()||!sp.empty()){
			if(!st.empty()){
			p1+=st.top();
			st.pop();
			}
			if(!sp.empty()){
			p2+=sp.top();
			sp.pop();
			}
			if(p1>=3||p2>=4){
				sum+=p2/4;
				sum+=p1/3;
				if(p1/3>0){
					st.push(p1/3);
					sp.push(p1/3);
				}
				if(p2/4>0){
					sp.push(p2/4);
					st.push(p2/4);
				}
				p1=p1%3;
				p2=p2%4;	
			}
		} 
	
		printf("%d\n",sum);
	}
	return 0;
}

发布了57 篇原创文章 · 获赞 69 · 访问量 6373

猜你喜欢

转载自blog.csdn.net/zp1455604302/article/details/95884372