如果我有一些int volume
,我将如何编写一个返回length
,width
和height
(所有整数)的方法,以便{{1 }和length*width*height>=volume
尽可能小?
基本上,给定体积的矩形棱镜的最小表面积(以及构成它的值)。
另外,理想情况下,它可以设置2(width*length+height*length+height*width)
,length
和/或width
,并且在解决问题时它们会保持不变。例如,在height
和width
时计算height
和volume=52
。
length=3
答案 0 :(得分:1)
按此计算体积:
double volume = length * width * height;
使用立方体根反转此过程以返回长度宽度和高度:
var val = Math.Pow(1000, ((double)1 / 3));
double length = val,
width = val,
height = val;
此外,还有一个如何对其中一个值进行硬编码的示例。您所做的就是从卷中分配硬编码值,然后使用平方根来获取最后两个值:
double volume = 1000; //example volume
double length = 50; //<- example hard coded length
double val = Math.Sqrt(volume / length);
double width = val,
height = val;
我最初发布这个没有意识到整数类型是问题的条件。我将此代码留在此处以供参考。
答案 1 :(得分:1)
这是一个强力解决方案:
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int volume = 52;
int l=0, w=0, h=0, minval=int.MaxValue;
for (int length = 1; length <= volume; length++)
{
for (int width = 1; width <= volume; width++)
{
for (int height = 1; height <= volume; height++)
{
if(length * width * height >= volume){
int area = 2*(length*width + width*height + length*height);
if(area < minval){
l=length;
w=width;
h=height;
minval = area;
}
}
}
}
}
Console.WriteLine("length = " + l + ", width= " + w + ", height = " + h);
}
}
}
这是为了找到满足条件的整数长度的矩形棱镜。如果不需要整数长度,则问题很简单,请参考caesay's answer。
恕我直言,您应该发布您的算法并尝试解决方案,然后请求更正/帮助。 Stackoverflow不应该用于完成整个工作。
答案 2 :(得分:-2)
从这个开始
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int volume = 0;
int surfaceArea = 0;
for (int length = 1; length < 100; length++)
{
for (int width = 1; width < 100; width++)
{
for (int height = 1; height < 100; height++)
{
}
}
}
}
}
}