UVA10365 Blocks 题解

· · 题解

题意

现在给你 c 组数据,每组有 N 个大小为 1 \times 1 \times 1 的正方体。输入 cc 组待处理的 N,求每组的 N 个立方体拼成的长方体表面积最小是多少。

思路

这道题可以采用暴力枚举拼成的长方形的长、宽、高来解决。

通过两重循环,第一重枚举长的值,如果可以被 N 整除,代表此时是合适的长。

接着继续枚举宽,如果之前确定下来的长与现在枚举的宽的积是体积 N 的因数,便可以得到合适的宽。

知道了长与宽,那么根据公式,高便可以求出。

最后便是用表面积公式求出此时长方形的表面积,并不断更新表面积最小值。

完整代码

#include<bits/stdc++.h>
using namespace std;
int c,n;
int a1,a2,a3;
int main(){
    cin>>c;
    while(c--){
        cin>>n;
        int ans=1e8+10;
        for(int l=1;l<=n;l++){//l:long,长
            if(n%l==0){//暴力枚举长方形的长,如果是体积n的因数,代表可以作为长,再接着枚举宽
                for(int w=1;w<=n;w++){//w:wide,宽
                    if(n%(l*w)==0){//长与宽都确定下来
                        int h=n/(l*w);//h:high,高,高等于体积n除以长乘宽的积
                        if(l*w*h==n){
                            a1=l*w*2;
                            a2=l*h*2;
                            a3=w*h*2;
                            ans=min(ans,a1+a2+a3);//通过表面积公式计算表面积,再通过min函数不断更新最小值
                        }
                    }
                }
            }
        }
        cout<<ans<<endl;
    }
    return 0;
}