【TUST“码蹄杯”编程之星】4.24

题目: 

故事背景:

在春日的校园里,图书馆旁的长廊总是弥漫着淡淡的花香。帅气又神秘的 Ntarsis,就像那抹清风,手里捧着一个长方体的盒子 B。这个盒子 B 就是他与心仪之人之间的距离——长为 x、宽为 y、高为 z,从坐标 (0,0,0) 延伸到 (x,y,z),稳稳地摆放在课桌一隅,仿佛暗恋的心事,清晰却又隐藏。

在他心底深处,还藏着另一个更小、更精巧的盒子 S,那是他对暗恋对象的悸动与期待。这个盒子 S 的体积恰好是 k,他希望 S 的长、宽、高都为正整数,就像他对喜欢的人,每一个小小的心意都真实而具体。只要把 S 放进 B,就像把心意放进那段青涩的暗恋里:

S 要与坐标轴平行,就像他对她的情感,始终保持着真诚与坚定。

S 的每个顶点都落在整数坐标上,就如同他对她的每一次鼓起勇气,都是一次清晰可见的表白。

S 是魔法盒,放在 B 里不会掉落,正如他的心意一旦表达,就会牢牢地留在她的心里。

任务描述:

Ntarsis 想在所有可能的 S 的尺寸(长、宽、高为正整数且体积为 k)中,选出一个最能“游走”于盒子 B 里的 S,让他可以有 最多 种不同的位置去偷偷安放这份心意。S 一旦选定尺寸,就不能旋转——就像他对暗恋的那份情感,方向已定,无法更改。现在,请你帮他计算:在每一种测试情况下,他最多可以有多少种不同的方式,将这份心意放进那段距离(盒子 B)里。

如果找不到任何一种尺寸的 S 能放进 B,就意味着这份心意无处释放,输出 0。

输入格式:

第一行四个整数 x, y, z, k

                          —— 盒子 B 的长宽高 x,y,z(1≤x,y,z≤2000),以及心意盒子 S 的体积 k(1≤k≤x·y·z)。

输出格式:

输出一个整数——Ntarsis 能选出的 S 放置方案的最大数量。如果所有可行的 S 大小都无法放入 B,则输出 0。

给定输入数据:

13 14 520 15155

题解:

        首先按照题目要求输入x,y,z,k四个变量的值,然后检测S的体积是否大于B的体积,若S的体积大于B的体积,不符合题意,输出0,结束运行。

        定义Ntarsis来存储S 放置方案的最大数量。

        定义两层循环来遍历S的长和宽,然后通过S的体积k,长x1,宽y1,来求S的高z1=k/x1/x2。

设置条件来确保z1<z、x1*y1*z1==k。

        定义临时变量max存储当前值下S放置方案的数量,若max大于之前值的S放置方案的最大数量Ntarsis,将Ntarsis更新为max对应的值。

        最后输出S 放置方案的最大数量Ntarsis。

答案:6336


#include<iostream>

using namespace std;

int main()
{
	int x, y, z, k;
	cin >> x >> y >> z >> k;
	if (k > x * y * z)
	{
		cout << 0;
		return 0;
	}
	int Ntarsis=0;        //最大能放置的数量
	for (int x1=1; x1 <= x; x1++)
	{
		for (int y1=1; y1 <= y; y1++)
		{
			
			int z1 = k / x1 / y1;
			if (z1 <= z && x1 * y1 * z1 == k)
			{
				int max = (z - z1 + 1) * (y - y1 + 1) * (x - x1 + 1);
				if (max > Ntarsis)
					Ntarsis = max;
			
			}
		}
	}
	cout << Ntarsis;
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值