给定体积棱镜的最小表面积,边长为整数

时间:2015-08-26 02:55:25

标签: c# geometry formula

如果我有一些int volume,我将如何编写一个返回lengthwidthheight(所有整数)的方法,以便{{1 }和length*width*height>=volume尽可能小?

基本上,给定体积的矩形棱镜的最小表面积(以及构成它的值)。

另外,理想情况下,它可以设置2(width*length+height*length+height*width)length和/或width,并且在解决问题时它们会保持不变。例如,在heightwidth时计算heightvolume=52

编辑:我写了这个简单的蛮力来向我展示我想要的答案。

length=3

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++)
                    {
                    }
                }
            }
        }
    }
}
​