zcmu -- 3037(找规律)

3037: Block Towers

时间限制: 2 Sec  内存限制: 256 MB
提交: 42  解决: 18
[提交][状态][讨论版]

题目描述

Students in a class are making towers of blocks. Each student makes a (non-zero) tower by stacking pieces lengthwise on top of each other. nof the students use pieces made of two blocks and m of the students use pieces made of three blocks.

The students don’t want to use too many blocks, but they also want to be unique, so no two students’ towers may contain the same number of blocks. Find the minimum height necessary for the tallest of the students' towers.

输入

 The first line of the input contains two space-separated integers n and m (0≤n,m≤1000000, n+m>0)− the number of students using two-block pieces and the number of students using three-block pieces, respectively.

输出

 Print a single integer, denoting the minimum possible height of the tallest tower.

样例输入

1 3

样例输出

9

提示

 In the first case, the student using two-block pieces can make a tower of height 4, and the students using three-block pieces can make towers of height 3, 6, and 9 blocks. The tallest tower has a height of 9 blocks.

来源

扫描二维码关注公众号,回复: 3287797 查看本文章

[提交][状态][讨论版]

题意:有的人每次用2块砖头盖塔,有的人每次用3块砖头盖塔,输入n,m分别表示用2和3块砖头盖房子的人,要求每个人用尽量少的砖头盖出高度不同的塔。输出满足要求的情况下最高的塔的高度。

思路:2块砖头的最高的塔的高度是a=2*n,同理3块的是b=3*n,但是要考虑a和b是6的情况,因为6的倍数无法判断是2和3哪一个盖的塔,所以每次让较高的塔高占据6的倍数(注意c要不断更新)。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long LL;
int main(void)
{
	LL n,m,c,a,b;
	while(~scanf("%lld %lld",&n,&m))
	{
		a=n*2;
		b=m*3;
		c=min(a,b);
		for(LL i=6;i<=c;i+=6)
		{
			if(a>b) b+=3;
			else a+=2;
			c=min(a,b);
		}
		printf("%lld\n",max(a,b));
	}
	return 0;
}

参考文章:https://blog.csdn.net/yu_ch_sh/article/details/50664415

猜你喜欢

转载自blog.csdn.net/qq_41829060/article/details/82750042