java - 尝试实现一些伪代码、算法

标签 java

我正在解决一个可以用java或伪代码完成的家庭作业问题,我正在尝试java代码方式。

背景:有一台制造 iPhone 外壳的机器。该机器可以制造三种可能的情况,每种情况都有不同的油漆成本。给定原始油漆量,返回可以制作的最小箱数的整数值。

这是我的代码,

public class ProblemFour
    {   
        //Array entries represent cost for red, green and blue respectively. 
        int[] classicCost = {4, 1, 1};
        int[] coolCost    = {3, 2, 1};
        int[] modernCost  = {1, 3, 2};
        String[] names = {"classic", "cool" , "modern"};
        int red;
        int green;
        int blue;
        Random generator = new Random();
        int pick = generator.nextInt(3);        
    public int minPhone(int r, int g, int b, String mold)
    {
        int counter = 0;
        if (r > 1 && g > 1 && b > 1 && mold.equals("classic"))
        {
            counter += 1;
            red   = r - classicCost[0];
            green = g - classicCost[1];
            blue  = b - classicCost[2];
            Random generator = new Random();
            int pick = generator.nextInt(3);
            counter += minPhone(red, green, blue, names[pick]);
        }
        else if (r > 1 && g > 1 && b > 1 && mold.equals("cool"))
        {
            counter += 1;
            red   = r - coolCost[0];
            green = g - coolCost[1];
            blue  = b - coolCost[2];
            Random generator = new Random();
            int pick = generator.nextInt(3);
            counter += minPhone(red, green, blue, names[pick]);
        }
        else if (r > 1 && g > 1 && b > 1 && mold.equals("modern"))
        {
            counter += 1;
            red   = r - modernCost[0];
            green = g - modernCost[1];
            blue  = b - modernCost[2];
            Random generator = new Random();
            int pick = generator.nextInt(3);
            counter += minPhone(red, green, blue, names[pick]);
        }
        return counter;
    }
}
public static void main(String[] args)
    {

        ProblemSetThree.ProblemFour example = new ProblemFour();
        String[] names = {"classic", "cool" , "modern"};
        Random generator = new Random();
        int pick = generator.nextInt(3);
        //System.out.println(pick);
        int testCount = example.minPhone(6, 7, 7, names[pick]);
        System.out.println(testCount);


    }
} 

所以在这个例子中,正确的答案是 2,而不是 3。我的代码有时会给出其中之一。如何确保它只返回最小数量?

之后,我需要将其变成动态编程程序。 我对此代码的优化或软件工程方面不感兴趣,只是它返回正确的答案。

谢谢。

最佳答案

由于这看起来像家庭作业,所以只有一些提示:

  • 为此您不需要随机数。

动态规划解决方案是:

  • 总体思路:
    • 如果我构建一个案例 A,将来我还可以构建的最少案例是多少?
    • 如果我构建案例 B,将来至少还能构建多少个案例?
    • 如果我构建案例 C,将来至少还能构建多少个案例?
  • 选择这些情况中的最小值并重复。

递归地,这将是:

//costs
int[] A = {4, 1, 1};
int[] B = {3, 2, 1};
dint[] C = {1, 3, 2};

public int minPhone(int r, int g, int b){
    int minA = 0;
    int minB = 0;
    int minC = 0;
    if(r-A[0] > 0,g-A[1] > 0,r-A[2] > 0){ //can I make a case A?
        minA = minPhone(r-A[0],g-A[1],r-A[2]);
    }
    if(r-B[0] > 0,g-B[1] > 0,r-B[2] > 0){ //can I make a case B?
        minB = minPhone(r-B[0],g-B[1],r-B[2]);
    }
    if(r-C[0] > 0,g-C[1] > 0,r-C[2] > 0){ //can I make a case C?
        minC = minPhone(r-C[0],g-C[1],r-C[2]);
    }
    minABC = min(minA,min(minB,minC));
    return minABC;
}

现在,您需要想出一个可以执行相同操作但不递归的版本。这就是动态规划。提示:想象一下像递归解决方案一样创建一个大型电子表格,但只需使用数组即可完成,无需递归。

关于java - 尝试实现一些伪代码、算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19348910/

相关文章:

java - CP1252转UTF-8编码后的特殊字符

java - Eclipse 未找到类定义 - Loadrunner lr.class

java - 具有固定原点的图形

java - 如何使用 map 创建类对象的副本?

java - Anylogic新分支抛出 "cannot be resolved to a variable"错误

java - 我可以在服务器端代码中使用 java applet 吗?

java - 禁用派生类上的继承方法

java - Android应用程序无法连接到外部apache mysql服务器

java - 用于创建 Lambda 的 AWS Java SDK 版本

VB Request.InputStream 的 Java 等效项