没太看懂要干嘛。至于你说的问题,你可以再用一个循环嘛。递归会比较直接一点
解决方案 »
- 哪位有java私塾的进销存项目视频
- java.io.EOFException
- java 开发----如何把一个SQl result 结果集 输出成.csv 文件??
- 如何修改文本文件内容
- 怎么样将Jar文件打包成双击Jar包就可以运行程序的??
- 我已经把一个类文件打成一个jar,双击却无任何响应,如何才能显示一个窗口,以便看到运行信息。
- 排序问题!!!急!!高分,在线等!!!
- 如何在使用JTable的窗口一打开时就高亮度显示表中的一条记录?
- jbuilder7 的基本配置是什么,我的800M+1024M还跑的很慢
- 打包成jar后,读取不了文件
- 请求组织点拨一个“图文混排”的“小技术难点”.
- 如何用Java实现区分虚拟机的IP地址和本机正在连接网络使用的ip地址
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的第一维
做材料分割优化的问题,想得到一种材料切割不同产品的各种方案。