解决方案 »
- 诡异的Java
- java操作文件 根据txt文件里的特殊字符替换另外特殊字符里面的东西(搞了两年java了,觉得这个问题最奇怪)
- 新人Runtime类的问题请教
- 小弟做一个java插入数据库功能。如何判断记录是否插入成功或失败,给个java片段
- 关于JTable和JScrollPane的问题
- Java Applet如何读取和预览PDF格式的文件,PDF可能是本地的、或者是服务器上的?
- 这样的程序应该如何编译运行?-请帮忙!
- Applet安全问题!
- 请问各路大侠 一个正则表达式的问题
- 我有一个问题一直不明白,一个端口能够建立多少个 Socket 连接?
- 关于框架
- JTable的刷新遇到问题请帮忙
class Test {
public static void main(String[] args) {
cal(9, 7, new StringBuilder());
} public static void cal(int n, int c, StringBuilder sb) {
if (n < c) {
return;
}
if (n == c) {
for (int i=1; i<=n; i++) {
sb.append("1");
}
System.out.println(sb);
return;
}
if (c == 1) {
sb.append(n);
System.out.println(sb);
return;
}
for (int i=1; i<=n; i++) {
StringBuilder s = new StringBuilder(sb);
s.append(i);
cal (n-i, c-1, s);
} }
}
class Test {
public static void main(String[] args) {
//cal(9, 7, new StringBuilder()); //最开始的只有打印没有计算的递归
//cal2(9, 7); //非递归
cal3(9, 7, new int[7], 0); //递归
} public static void cal(int n, int c, StringBuilder sb) {
if (n < c) {
return;
}
if (n == c) {
for (int i=1; i<=n; i++) {
sb.append("1");
}
System.out.println(sb);
return;
}
if (c == 1) {
sb.append(n);
System.out.println(sb);
return;
}
for (int i=1; i<=n; i++) {
StringBuilder s = new StringBuilder(sb);
s.append(i);
cal (n-i, c-1, s);
} } public static void cal2(int n, int c) { //非递归方法
int max = n-c+1;
int[] idx = new int[c];
Arrays.fill(idx, 1);
int sum = 0;
while (true) {
sum = 0;
for (int i=0; i<idx.length; i++) {
sum += idx[i];
}
if (sum == n) {
System.out.printf("%s : %.5f\n", Arrays.toString(idx), ev(idx));
}
idx[idx.length-1]++;
for (int i=idx.length-1; i>0; i--) {
if (idx[i]-1 == max) {
idx[i] = 1;
idx[i-1]++;
}
}
if (idx[0] == max) {
System.out.printf("%s : %.5f\n", Arrays.toString(idx), ev(idx));
break;
}
}
} public static void cal3(int n, int c, int[] a, int k) { //递归方法
if (n < c) {
return;
}
if (n == c) {
for (int i=1; i<=n; i++) {
a[k+i-1] = 1;
}
System.out.printf("%s : %.5f\n", Arrays.toString(a), ev(a));
return;
}
if (c == 1) {
a[a.length-1] = n;
System.out.printf("%s : %.5f\n", Arrays.toString(a), ev(a));
return;
}
for (int i=1; i<=n-c+1; i++) {
a[k] = i;
cal3(n-i, c-1, a, k+1);
}
} public static double ev(int[] a) { //求均方差
double e = 0.0;
for (int i=0; i<a.length; i++) {
e += a[i]; //和
}
e /= a.length; //平均数
double ex = 0.0;
for (int i=0; i<a.length; i++) {
ex += Math.pow((e-a[i]), 2); //差平方和
}
ex /= a.length; //方差
return Math.sqrt(ex); //方差平方根--均方差 }
}