题意:给定一个立方体的体积,使其表面积最小,求长宽高(长宽高均为整数)
分析:先求其所有因子,然后暴力枚举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 ;
}
#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 ;
}