北京林业大学校赛-A题(喝酒)

题目链接点击打开链接

这道题是一个简单模拟题,看懂题意,知道什么情况下能换,只要瓶和盖子有一个条件能够满足换的可能,就能继续循环,最后注意一下,换过来新的酒之后,剩余的瓶子和盖子都得加上这个值,,代码注释很清楚!!

#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>                      
#include <map>
#include <vector>
#include <cmath>
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1                                  
using namespace std;
const int maxn = 55555;
int sum[maxn << 2];

int main(void)
{
	//freopen("in.txt", "r", stdin);
	int p, g, total;
	int T;

	scanf("%d", &T);
	while (T--)
	{
		int n;
		scanf("%d", &n);
		p = g = n;
		total = n;

		while (p / 3 || g / 4)         //只要有满足可以换的条件,就换,就加
		{
			int tmp;
			if (p / 3)                 //说明瓶子的个数还能继续换
			{
				tmp = p / 3;            //换了多少瓶酒
				p = p % 3; 
				total += tmp;
				p = p + tmp;            //还剩下的瓶子,要加上最新换的
				g = g + tmp;
			}
			if (g / 4)                   //说明盖子的个数还足以换
			{
				tmp = g / 4;
				g = g % 4;                //换完之后,剩下的是
				total += tmp;
				g = g + tmp;               //瓶子,盖子同时都要加上
				p = p + tmp;
			}
		}
		printf("%d\n", total);
	}
	return 0;
}

你可能感兴趣的:(北京林业大学校赛)