Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的计算结果错了?_C# - Fatal编程技术网

C# 为什么我的计算结果错了?

C# 为什么我的计算结果错了?,c#,C#,我正在建立一个程序,在这个程序中,它可以计算出在C#中任意尺寸的盒子中可以容纳多少块砖。而且砖块适合任何方向。它在我的一些测试中起作用,其中返回的答案是我期望的结果,但在其他测试中,返回的答案(虽然技术上是正确的)并不是您可以放入框中的最大数字 private static int BricksPerDimension(int dimWidth, int dimLength, int dimHeight, int brickSideWidth, int brickSideLength, int

我正在建立一个程序,在这个程序中,它可以计算出在C#中任意尺寸的盒子中可以容纳多少块砖。而且砖块适合任何方向。它在我的一些测试中起作用,其中返回的答案是我期望的结果,但在其他测试中,返回的答案(虽然技术上是正确的)并不是您可以放入框中的最大数字

private static int BricksPerDimension(int dimWidth, int dimLength,  int dimHeight, int brickSideWidth, int brickSideLength, int brickSideHeight)
        {
            int newBrickSideHeight;
            int newBrickSideWidth;

            if (dimHeight >= brickSideLength)
            {
                newBrickSideHeight = brickSideLength;             
                return (int)Math.Floor((double)dimHeight / newBrickSideHeight);
            }

            else if (dimWidth >= brickSideLength)
            {
                newBrickSideWidth = brickSideLength;

                return (int)Math.Floor((double)dimWidth / newBrickSideWidth);
            }
            else if (dimLength >= brickSideLength)
            {

                return (int)Math.Floor((double)dimLength / brickSideLength);
            }
            else if (dimLength <= brickSideLength && dimHeight <= brickSideLength && dimWidth <= brickSideLength)
            {
                return 0;
            }
            else
            {
                return 0;
            }
private static int-BricksPerDimension(int-dimWidth、int-dimLength、int-dimHeight、int-brickSideWidth、int-brickSideLength、int-brickSideHeight)
{
int dimMax、dimMid、dimMin;
int-brickSideMax,brickSideMin,brickSideMin;
//TODO:dimWidth、dimLength、dimHeight=>dimMax、dimMid、dimMin
//brickSideMax、brickSideMin、brickSideMin也是如此。
如果(dimMax
就像三选一彩票一样,这三个维度可以代表任何位置,例如平铺、端高或侧面。因此,我们有6种组合,基于ex:123、132、213、231、312、321,其中每个数字都位于各自的位置。 如果你有一些奇怪的尺寸,比如25x33x40和11x10x5的砖块尺寸(是的,对),那么11对应于25,10到33,5到40并不一定有意义,但是如果你根据这个计算,你会得到每25块2块砖块,每33块3块,每40块8块,或者2x3x8=48块砖块

现在,如果在11位于第二个位置、10位于最后一个位置、5位于第一个位置的位置进行尝试,你会得到5:25、11:33和10:40,或者5块砖乘以3块砖乘以4块砖5x3x4=60块砖,因为我们无法将砖切割成分数,而你使用地板来处理。因此,我会尝试所有6种组合,只取最高的

请注意我是如何测试的。我总是将框的尺寸分别保留为长度、宽度和高度。然后,在循环中,我所做的就是更改测试变量“l”长度、“w”idth和“h”六种组合中的八种组合,如三选一彩票。通过测试每种组合的整数,将给出其自身的值,该值基于放置在盒子中进行堆叠的方式……以哪种方式获胜最多

因此,对于过程0/1,长度var保持不变,h/w交换。在过程2/3中,宽度位于第一个位置,交换l/h,最后在过程4/5中,高度位于第一个位置,交换l/w。因此,所有6种组合都占了上风

示例调用

totalBricks = BricksPerDimension(20, 70, 30, 1, 2, 5);   
MessageBox.Show(totalBricks.ToString());

totalBricks = BricksPerDimension(25, 33, 40, 11, 10, 5);
MessageBox.Show(totalBricks.ToString());
以及更新后的功能

private static int BricksPerDimension(int dimWidth, int dimLength, int dimHeight, int brickSideWidth, int brickSideLength, int brickSideHeight)
{
   int maxBricks = 0;
   int curBricks = 0;
   int l, w, h;
   l = w = h = 0;
   for (int i = 0; i < 6; i++)
   {

      switch (i)
      {
         case 0:
            l = brickSideLength;
            h = brickSideHeight;
            w = brickSideWidth;
            break;

         case 1:
            l = brickSideLength;
            w = brickSideHeight;
            h = brickSideWidth;
            break;

         case 2:
            w = brickSideLength;
            l = brickSideHeight;
            h = brickSideWidth;
            break;

         case 3:
            w = brickSideLength;
            h = brickSideHeight;
            l = brickSideWidth;
            break;

         case 4:
            h = brickSideLength;
            l = brickSideHeight;
            w = brickSideWidth;
            break;

         case 5:
            h = brickSideLength;
            w = brickSideHeight;
            l = brickSideWidth;
            break;

      }

      curBricks = ((int)dimLength / l)
               * ((int)dimWidth / w)
               * ((int)dimHeight / h);

      if (curBricks > maxBricks)
         maxBricks = curBricks;
   }

   return maxBricks;
}
private static int-BricksPerDimension(int-dimWidth、int-dimLength、int-dimHeight、int-brickSideWidth、int-brickSideLength、int-brickSideHeight)
{
int maxBricks=0;
int路缘石=0;
int l,w,h;
l=w=h=0;
对于(int i=0;i<6;i++)
{
开关(一)
{
案例0:
l=砖边长度;
h=砖面高度;
w=砖面宽度;
打破
案例1:
l=砖边长度;
w=砖面高度;
h=砖面宽度;
打破
案例2:
w=砖体长度;
l=砖面高度;
h=砖面宽度;
打破
案例3:
w=砖体长度;
h=砖面高度;
l=砖面宽度;
打破
案例4:
h=砖体长度;
l=砖面高度;
w=砖面宽度;
打破
案例5:
h=砖体长度;
w=砖面高度;
l=砖面宽度;
打破
}
路缘石=((内部)dimLength/l)
*((内部)DIMWITH/w)
*((int)dimHeight/h);
如果(路缘石>maxBricks)
maxBricks=路缘石;
}
返回maxBricks;
}

你没有复制所有的代码吗?你的代码在任何地方都不会进行乘法运算,所以我不明白你是如何得到你发布的任何结果的。很抱歉,我记下了这一点,但就目前而言,它甚至不会编译无误,因为你的两个INT声明中的变量从未初始化为任何内容。@DRapp“TODO”中的任务太简单了。您好,非常感谢。这非常有效。我想我最终确实发现了我的代码的问题,但我认为让它正常工作会是一件非常头痛的事情,而且这比我的方法更有意义。
totalBricks = BricksPerDimension(20, 70, 30, 1, 2, 5);   
MessageBox.Show(totalBricks.ToString());

totalBricks = BricksPerDimension(25, 33, 40, 11, 10, 5);
MessageBox.Show(totalBricks.ToString());
private static int BricksPerDimension(int dimWidth, int dimLength, int dimHeight, int brickSideWidth, int brickSideLength, int brickSideHeight)
{
   int maxBricks = 0;
   int curBricks = 0;
   int l, w, h;
   l = w = h = 0;
   for (int i = 0; i < 6; i++)
   {

      switch (i)
      {
         case 0:
            l = brickSideLength;
            h = brickSideHeight;
            w = brickSideWidth;
            break;

         case 1:
            l = brickSideLength;
            w = brickSideHeight;
            h = brickSideWidth;
            break;

         case 2:
            w = brickSideLength;
            l = brickSideHeight;
            h = brickSideWidth;
            break;

         case 3:
            w = brickSideLength;
            h = brickSideHeight;
            l = brickSideWidth;
            break;

         case 4:
            h = brickSideLength;
            l = brickSideHeight;
            w = brickSideWidth;
            break;

         case 5:
            h = brickSideLength;
            w = brickSideHeight;
            l = brickSideWidth;
            break;

      }

      curBricks = ((int)dimLength / l)
               * ((int)dimWidth / w)
               * ((int)dimHeight / h);

      if (curBricks > maxBricks)
         maxBricks = curBricks;
   }

   return maxBricks;
}