意:已知一个长方体的体积为n,求出使这个长方体的表面积最小时的三条边的长度。
思路:即 a*b*c = n, 求min(a*b + a*c + b*c)中的a,b,c。列出能够被n整除的因子(这点比较重要,不能一开始就暴力枚举),然后暴力枚举
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
int canzhen[1000];
int main(){
int n;
while(scanf("%d", &n) != EOF){
memset(canzhen,0,sizeof(canzhen));
int min = 999999999;
int biaoi=0,biaoj=0,biaok=0;
int count = 0;
for(int i = 1; i <= n; i++){
if(n%i == 0){
canzhen[count++] = i;
}
}
for(int i = 0; i < count;i++){
for(int j = 0; j < count; j++){
for(int k = 0; k < count; k++){
if(canzhen[i]*canzhen[j]*canzhen[k] == n){
if(canzhen[i]*canzhen[j]+canzhen[j]*canzhen[k]+canzhen[i]*canzhen[k] <= min)
{
min = canzhen[i]*canzhen[j]+canzhen[j]*canzhen[k]+canzhen[i]*canzhen[k];
biaoi = canzhen[i];
biaoj = canzhen[j];
biaok = canzhen[k];
}
}
}
}
}
printf("%d %d %d\n", biaoi, biaoj, biaok);
}
return 0;
}