UVA10365 Blocks 题解
题意
现在给你
思路
这道题可以采用暴力枚举拼成的长方形的长、宽、高来解决。
通过两重循环,第一重枚举长的值,如果可以被
接着继续枚举宽,如果之前确定下来的长与现在枚举的宽的积是体积
知道了长与宽,那么根据公式,高便可以求出。
最后便是用表面积公式求出此时长方形的表面积,并不断更新表面积最小值。
完整代码
#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;
}