没太看懂要干嘛。至于你说的问题,你可以再用一个循环嘛。递归会比较直接一点

解决方案 »

  1.   

    你想要的功能虽然很奇怪,但是用递归还是能够实现
    package csdn;public class MinMaterImpl { public static void main(String[] args) {
    int n = 80;
    // int[] p = { 30, 28, 20 };
    int[] p = { 30, 28, 20, 16, 11 };
    int s = 1;
    MinMaterImpl demo = new MinMaterImpl();
    int[][] ak = demo.acc(n, p, s);
    for (int i = 0; i < ak.length; i++) {
    for (int j = 0; j < ak[i].length; j++) {
    System.out.print(ak[i][j] + "\t");
    }
    System.out.println();
    } } public void fun(int eMaterial, int[] pro, int s, int[] rst, int[][] scheme,
    int[] m, int n) {
    for (int i = 0; i <= pro[pro.length - n]; ++i) {
    rst[pro.length - n] = i;
    if (n > 1) {
    fun(eMaterial, pro, s, rst, scheme, m, n - 1);
    } else {
    int r = eMaterial;
    for (int j = 0; j < rst.length; ++j) {
    r = r - rst[j] * (pro[j] + s);
    }
    if (r == -1) {
    r = 0;
    }
    if (r >= 0 && r < pro[2]) {
    if (k < 14) {
    k++;
    }
    for (int j = 0; j < rst.length; ++j) {
    scheme[j][k] = rst[j];
    }
    scheme[rst.length][k] = r;
    }
    }
    }
    } static int k = 0;  private int[][] acc(int eMaterial, int[] pro, int s) {
    // TODO Auto-generated method stub
    int n = pro.length;
    int[][] scheme = new int[n + 1][25]; // 你的p数组变大的同时,应该增大该数组第一维的值,否则会超出数组范围
    int[] m = new int[n]; int[] rst = new int[pro.length];
    for (int i = 0; i < n; i++) {
    scheme[i][0] = pro[i];
    m[i] = eMaterial / pro[i];
    }
    for (int i1 = 0; i1 <= m[0]; i1++) {
    rst[0] = i1;
    if (n > 1) {
    fun(eMaterial, pro, s, rst, scheme, m, n - 1);
    }
    }
    return scheme;
    }
    }但是当你增大你的p数组时,你必须适当增大你的scheme数组的第一维,否则k会超出scheme的第一维
      

  2.   


    做材料分割优化的问题,想得到一种材料切割不同产品的各种方案。