题目大意
给你 N N N 个 1 × 1 × 1 1\times 1\times 1 1×1×1 的立方体,拼成一个长方体,计算最小的表面积。其实就相当于给 V V V 求 S S S 的最小值。
思路
第一个想到的是分配质因数。分配质因数的难度较大,而且应该不是正解。自测错误。
所以正确的方法是暴力枚举长宽高,每次判断是否找到更小的表面积。是就更新。
知识点
S = 2(ab + ah + bh) S=\texttt{2(ab + ah + bh)} S=2(ab + ah + bh)
V = abh V=\texttt{abh} V=abh
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int k;
scanf("%d",&k);
for(int i = 1;i <= k;i++){
int a;
scanf("%d",&a);
int answer = a * 6;
for(int x = 1;x <= a;x++){
if(a % x == 0){
for(int y = 1;y <= a / x;y++){
if((a / x) % y == 0){
if(2 * (x * y + a / y + a / x) < answer){
answer = 2 * (x * y + a / y + a / x);
//printf("%d %d %d\n",x,y,a/x/y);
}
}
}
}
}
printf("%d\n",answer);
}
}