Java 试图实现一些伪代码、算法

Java 试图实现一些伪代码、算法,java,Java,我正在做一个家庭作业,可以用java或伪代码完成,我正在尝试java代码的方式 背景:有一台制造iphone外壳的机器。这台机器有三种可能的外壳,每种都有不同的油漆成本。给定原始油漆量,返回可以制作的最小外壳量的整数值 这是我的密码 public class ProblemFour { //Array entries represent cost for red, green and blue respectively. int[] classic

我正在做一个家庭作业,可以用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。我的代码有时也会给出。如何确保它只返回最小值

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


多谢各位

因为这看起来像是家庭作业,所以这里有几个提示:

  • 你不应该需要随机数
动态规划解决方案是:

//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;
}
  • 总体思路:
    • 如果我构建了一个案例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;
}

现在,您需要提出一个做同样事情的版本,但不是递归的。这就是动态规划。提示:考虑创建一个类似递归解决方案的大型电子表格,但只需使用一个数组即可,而无需递归。

downvoter的基本原理是什么?这是我的代码,不是从书本或作业中抄来的。也许它看起来有点太过了。。?dunnoIt在第一行中说,这是硬件任务的一部分。这是一个特定的编程问题。我不介意投反对票,但打了就跑很烦人。看看背包问题(油漆量=容量,每件油漆量=重量),你想要的算法通常被称为装箱。大量关于的例子。谢谢。随机数是因为,我忘了提到,问题中的机器坏了,它随机挑选手机壳来制造。如果机器坏了,那么它生产的手机壳数量总是大于或等于最小值,所以如果你需要最小值,那么“坏了”没关系,我给你的算法计算的是最小值。动态规划背后的思想是开始向后/递归地思考。假设你只有0个油漆,最小值是多少?现在假设你有足够的油漆来制作1箱A或2箱B:如果你想在最后制作最少数量的箱,你更愿意制作哪一箱A、B或C?