poj3536

题意:给定一个立方体的体积,使其表面积最小,求长宽高(长宽高均为整数)

分析:先求其所有因子,然后暴力枚举3条棱的长度,更新最小面积。

View Code
#include < iostream >
#include
< cstdio >
#include
< cstdlib >
#include
< cstring >
using namespace std;

#define maxn 10000

long long f[maxn];

int main()
{
// freopen("t.txt", "r", stdin);
int t;
scanf(
" %d " , & t);
int n = 0 ;
for ( int i = 1 ; i * i <= t; i ++ )
if (t % i == 0 )
{
f[n
++ ] = i;
f[n
++ ] = t / i;
}
int a, b, c, ans = 0x3f3f3f3f ;
for ( int i = 0 ; i < n; i ++ )
for ( int j = 0 ; j < n; j ++ )
if (t % (f[i] * f[j]) == 0 )
for ( int k = 0 ; k < n; k ++ )
if (t == f[i] * f[j] * f[k] && ans > f[i] * f[j] + f[j] * f[k] + f[k] * f[i])
{
ans
= f[i] * f[j] + f[j] * f[k] + f[k] * f[i];
a
= i;
b
= j;
c
= k;
}
printf(
" %lld %lld %lld\n " , f[a], f[b], f[c]);
return 0 ;
}

你可能感兴趣的:(poj)