题目:
故事背景:
在春日的校园里,图书馆旁的长廊总是弥漫着淡淡的花香。帅气又神秘的 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;
}