【问题标题】:Print all possible combinations with limit restrictions打印具有限制限制的所有可能组合
【发布时间】:2015-09-22 22:41:56
【问题描述】:

我有一组多维数组,其中包含一种食物和该食物的价格。用户输入食物及其价格,然后将它们放入数组中。我知道数组是从用户输入的内容中成功填充的,因为我已经通过打印出来对其进行了测试。那段代码仍在我的示例中,但可以忽略。但我需要做的是打印出有限金额的膳食可能组合,并且膳食必须有 1 块肉、2 种水果、3 种蔬菜和 1 种意大利面。我不知道如何使它工作。我知道我需要解析食物的价格才能使用它们进行数学计算。感谢您的帮助。

    public static void fillarrays(){
    String meatarray [][] = {{meat1,meat2,meat3},{meatprice1,meatprice2,meatprice3}};
    String fruitarray [][] = {{fruit1,fruit2,fruit3,fruit4,fruit5,fruit6},{fruitprice1,fruitprice2,fruitprice3,fruitprice4,fruitprice5,fruitprice6}};
    String vegetablearray [][] = {{veg1,veg2,veg3,veg4,veg5,veg6,veg7,veg8},{vegprice1,vegprice2,vegprice3,vegprice4,vegprice5,vegprice6,vegprice7,vegprice8}};
    String pastaarray [][] = {{pasta1,pasta2,pasta3,pasta4},{pastaprice1,pastaprice2,pastaprice3,pastaprice4}};

    System.out.println("Meat");
    displayarray(meatarray);
    System.out.println("Fruit");
    displayarray(fruitarray);
    System.out.println("Vegetables");
    displayarray(vegetablearray);
    System.out.println("Pasta");
    displayarray(pastaarray);

}

public static void displayarray(String x[][]){
    for(int row=0; row<x.length; row++){
        for(int column=0; column<x[row].length; column++){
            System.out.print(x[row][column] + "\t\t" );
        }
        System.out.println();
    }
}

【问题讨论】:

  • psst... OO 是要走的路,那么您就不必处理多维数组
  • 你可以使用 8 个嵌套循环,哈哈……OO 确实是要走的路
  • 我怎样才能使用 OO 让它变得更好.. 能不能顺便给我举个例子?

标签: java arrays multidimensional-array combinations


【解决方案1】:

你可以这样做:

long maxPrice = // ...
for(int m = 0 ; m < meatarray[1].length ; ++m) {
  if(meatarray[1][m] <= maxPrice) {
    for(int f = 0 ; f < fruitarray[1].length ; ++f) {
      if(meatarray[1][m] + fruitarray[1][f] <= maxPrice) {
        for(int v = 0 ; v < vegetablearray[1].length ; ++v) {
          if(meatarray[1][m] + fruitarray[1][f] + vegetablearray[1][v] <= maxPrice) {
            for(int p = 0 ; v < pastaarray[1].length ; ++p) {
              if(meatarray[1][m] + fruitarray[1][f] + vegetablearray[1][v]
                 + pastaarray[1][p] <= maxPrice) {
                System.out.println(meatarray[0][m] + " " + fruitarray[0][f] + " "
                  + vegetablearray[0][v] + " " + pastaarray[0][p]);
              }
            }
          }
        }
      }
    }
  }
}

【讨论】:

  • 这将允许我从水果中选择 2 个,从蔬菜中选择 3 个?
猜你喜欢
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多