急!!怎么用JAVA把彩票11选5的所有组合打印出来?? 急!!怎么用JAVA把彩票11选5的所有组合打印出来??另外,各位大哥,如果会的,麻烦再帮写下怎么把双色球的甩有组合结果也打印出来,刚老师布置的任务,不会啊 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Permutation.javaimport java.util.ArrayList;class Permutation { ArrayList<ArrayList> _E = new ArrayList<ArrayList>(); int _n; int _k; Permutation(int n, int k) { _n = n; _k = k; if (_k > _n || _k < 0 || _n < 0) { _n = 0; _k = 0; } int val[] = new int[_k]; for (int j = 0; j < _k; ++j) val[j] = 0; for (int j = 0; j < Math.pow(_n, _k); ++j) { incrementVal(val, 0); if (isNoDup(val) == true) { ArrayList<Integer> Nums = new ArrayList<Integer>(); for (int jj = 0; jj < _k; ++jj) { Nums.add(val[jj]); } _E.add(Nums); } } } public int getN() { return _n; } public int getK() { return _k; } public void getElements(int count, int val[]) { ArrayList<Integer> temp = new ArrayList<Integer>(); if (count < getSize()) { temp = _E.get(count); for (int i = 0; i < temp.size(); ++i) { val[i] = temp.get(i); } } } public String toString(int count) { ArrayList<Integer> temp = new ArrayList<Integer>(); temp = _E.get(count); String result = ""; for (int i = 0; i < _k; ++i) { result += temp.get(i); if (i != _k - 1) result += ","; } return result; } public long getSize() { long size = 0; size = factorial(_n) / factorial(_n - _k); return size; } private long factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } private void incrementVal(int val[], int cnt) { if (cnt >= _k) { for (int i = 0; i < _k; ++i) val[i] = 0; } else { ++val[cnt]; if (val[cnt] >= _n) { for (int i = 0; i <= cnt; ++i) val[i] = 0; incrementVal(val, cnt + 1); } } } private boolean isNoDup(int val[]) { int num[] = new int[_n]; for (int i = 0; i < _n; ++i) num[i] = 0; for (int j = 0; j < _k; ++j) { ++num[val[j]]; if (num[val[j]] > 1) return false; } return true; }}FiveInEleven.javapublic class FiveInEleven { public static void main(String[] args) { int n = 11; int k = 5; Permutation p = new Permutation(n, k); System.out.println("P(" + p.getN() + "," + p.getK() + ")=" + p.getSize()); System.out.println("所有组合:"); for (int i = 0; i < p.getSize(); ++i) { System.out.println(i + ":" + p.toString(i)); } int temp[] = new int[k]; for (int i = 0; i < p.getSize(); ++i) { String result = ""; p.getElements(i, temp); result += (i + 1) + ":"; for (int j = 0; j < temp.length; ++j) { result += (temp[j] + 1); if (j != temp.length - 1) { result += ","; } } System.out.println(result); } }} 还是要使用Permutation的,上面写的Permutation.java别删了。Combination.javaimport java.util.ArrayList;class Combination { ArrayList<ArrayList> _E = new ArrayList<ArrayList>(); int _n; int _k; Combination(int n, int k) { _n = n; _k = k; if (_k > _n || _k < 0 || _n < 0) { _n = 0; _k = 0; } int temp[] = new int[_k]; Permutation _p = new Permutation(_n, _k); for (int i = 0; i < _p.getSize(); ++i) { _p.getElements(i, temp); if (isUniqueElement(temp) == true) { ArrayList<Integer> Nums = new ArrayList<Integer>(); for (int j = 0; j < _k; ++j) { Nums.add(temp[j]); } _E.add(Nums); } } } public int getN() { return _n; } public int getK() { return _k; } public void getElements(int count, int val[]) { ArrayList<Integer> temp = new ArrayList<Integer>(); if (count < getSize()) { temp = _E.get(count); for (int i = 0; i < temp.size(); ++i) { val[i] = temp.get(i); } } } public String toString(int count) { ArrayList<Integer> temp = new ArrayList<Integer>(); temp = _E.get(count); String result = ""; for (int i = 0; i < _k; ++i) { result += (temp.get(i) + 1); if (i != _k - 1) result += ","; } return result; } public long getSize() { long size = 0; size = factorial(_n) / factorial(_n - _k) / factorial(_k); return size; } private long factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } private boolean isUniqueElement(int val[]) { java.util.Arrays.sort(val); int temp[] = new int[_k]; for (int i = 0; i < _E.size(); ++i) { getElements(i, temp); java.util.Arrays.sort(temp); boolean match = true; for (int j = 0; j < temp.length; ++j) { if (val[j] != temp[j]) { match = false; break;// ほんのちょっと時間節約 } } if (match == true) return false; } return true; }使用public static void main(String[] args) { int n = 11; int k = 5; Combination c = new Combination(n, k); System.out.println("C(" + c.getN() + "," + c.getK() + ")=" + c.getSize()); for (int i = 0; i < c.getSize(); ++i) { System.out.println((i + 1) + ":" + c.toString(i)); } }一共462,如果你的控制台只显示了最后一部分。请自行改成输出到文件,然后查看答案。 哦,看来问题是解决了,太谢谢了,这里还想多问个小问题哦,我才学JAVA几天不太懂,你这里说有55440行输入,程序里不是对每种可能结果都打印System.out.println()输出了么,怎么控制台里只输出最后一部分呢,如果想要完整地输出,要怎么弄哦 我都打了,没有只打印部分。 而是Eclipse控制台只显示了最后一部分。在控制台里面(有输出内容后)右键--首选项--控制台缓冲区大小,设置得大大大一点就能显示所有的了。问题如果搞定了的话,请结贴吧。 public class Test2{ static int sum=0; static int kind=0; static int a[]=new int[6]; static int sumji[]=new int[46]; public static void main(String[] args) { dfs(1,12); for(int i=15;i<=45;i++) System.out.println("和="+i+" 共有 "+sumji[i]+"个."); System.out.println("共有 "+kind+" 种组合."); } public static void dfs(int m,int n) { if(m==6) { if(sum(14,46)) { for(int i=1;i<a.length;i++) System.out.printf("%3d",a[i]); System.out.println(); sum=0; kind++; } } else { for(int i=a[m-1]+1;i<n;i++) { a[m]=i; dfs(m+1,n); a[m]-=i; } } } public static boolean sum(int low,int high) { for(int i=1;i<a.length;i++) sum+=a[i]; if(sum>low &&sum<high) { sumji[sum]++; System.out.print("和:"+sum); sum=0; return true; } sum=0; return false; }}和:15 1 2 3 4 5和:16 1 2 3 4 6和:17 1 2 3 4 7和:18 1 2 3 4 8和:19 1 2 3 4 9和:20 1 2 3 4 10和:21 1 2 3 4 11和:17 1 2 3 5 6和:18 1 2 3 5 7和:19 1 2 3 5 8和:20 1 2 3 5 9和:21 1 2 3 5 10和:22 1 2 3 5 11和:19 1 2 3 6 7和:20 1 2 3 6 8和:21 1 2 3 6 9和:22 1 2 3 6 10和:23 1 2 3 6 11和:21 1 2 3 7 8和:22 1 2 3 7 9和:23 1 2 3 7 10和:24 1 2 3 7 11和:23 1 2 3 8 9和:24 1 2 3 8 10和:25 1 2 3 8 11和:25 1 2 3 9 10和:26 1 2 3 9 11和:27 1 2 3 10 11和:18 1 2 4 5 6和:19 1 2 4 5 7和:20 1 2 4 5 8和:44 6 8 9 10 11和:45 7 8 9 10 11和=15 共有 1个.和=16 共有 1个.和=17 共有 2个.和=18 共有 3个.和=19 共有 5个.和=20 共有 7个.和=21 共有 10个.和=22 共有 12个.和=23 共有 16个.和=24 共有 19个.和=25 共有 23个.和=26 共有 25个.和=27 共有 29个.和=28 共有 30个.和=29 共有 32个.和=30 共有 32个.和=31 共有 32个.和=32 共有 30个.和=33 共有 29个.和=34 共有 25个.和=35 共有 23个.和=36 共有 19个.和=37 共有 16个.和=38 共有 12个.和=39 共有 10个.和=40 共有 7个.和=41 共有 5个.和=42 共有 3个.和=43 共有 2个.和=44 共有 1个.和=45 共有 1个.共有 462 种组合. java既然有了互斥锁了,那么读写锁似乎有点重复啊 JcomboBox事件监听建立 我们课程设计要求设计一个磁卡充值的管理程序,请问设计思路是什么? 请教,java中的Stack类是做什么用的?什么情况下使用? Array向Vector赋值问题,谢谢! 请教一个引用包问题? 这个是为什么不能实现?(等待中) 在用java做poj时遇到的一个Scanner的输入问题 在java中应用FLASH可以吗?帮忙 JAVA泛型疑惑 面试题:关于String 用正则怎么匹配正确的路径?
import java.util.ArrayList;class Permutation {
ArrayList<ArrayList> _E = new ArrayList<ArrayList>();
int _n;
int _k; Permutation(int n, int k) {
_n = n;
_k = k; if (_k > _n || _k < 0 || _n < 0) {
_n = 0;
_k = 0;
}
int val[] = new int[_k];
for (int j = 0; j < _k; ++j)
val[j] = 0; for (int j = 0; j < Math.pow(_n, _k); ++j) {
incrementVal(val, 0); if (isNoDup(val) == true) { ArrayList<Integer> Nums = new ArrayList<Integer>();
for (int jj = 0; jj < _k; ++jj) {
Nums.add(val[jj]);
}
_E.add(Nums);
}
} } public int getN() {
return _n;
} public int getK() {
return _k;
}
public void getElements(int count, int val[]) {
ArrayList<Integer> temp = new ArrayList<Integer>();
if (count < getSize()) {
temp = _E.get(count);
for (int i = 0; i < temp.size(); ++i) {
val[i] = temp.get(i);
}
}
}
public String toString(int count) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp = _E.get(count);
String result = "";
for (int i = 0; i < _k; ++i) {
result += temp.get(i);
if (i != _k - 1)
result += ",";
}
return result;
}
public long getSize() {
long size = 0;
size = factorial(_n) / factorial(_n - _k);
return size;
}
private long factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
} private void incrementVal(int val[], int cnt) {
if (cnt >= _k) {
for (int i = 0; i < _k; ++i)
val[i] = 0;
} else { ++val[cnt];
if (val[cnt] >= _n) {
for (int i = 0; i <= cnt; ++i)
val[i] = 0;
incrementVal(val, cnt + 1);
}
}
}
private boolean isNoDup(int val[]) {
int num[] = new int[_n];
for (int i = 0; i < _n; ++i)
num[i] = 0;
for (int j = 0; j < _k; ++j) {
++num[val[j]];
if (num[val[j]] > 1)
return false;
}
return true;
}}FiveInEleven.javapublic class FiveInEleven {
public static void main(String[] args) { int n = 11;
int k = 5; Permutation p = new Permutation(n, k); System.out.println("P(" + p.getN() + "," + p.getK() + ")="
+ p.getSize()); System.out.println("所有组合:"); for (int i = 0; i < p.getSize(); ++i) {
System.out.println(i + ":" + p.toString(i));
} int temp[] = new int[k];
for (int i = 0; i < p.getSize(); ++i) {
String result = "";
p.getElements(i, temp);
result += (i + 1) + ":";
for (int j = 0; j < temp.length; ++j) {
result += (temp[j] + 1);
if (j != temp.length - 1) {
result += ",";
}
}
System.out.println(result);
} }}
Combination.javaimport java.util.ArrayList;class Combination { ArrayList<ArrayList> _E = new ArrayList<ArrayList>();
int _n;
int _k; Combination(int n, int k) {
_n = n;
_k = k; if (_k > _n || _k < 0 || _n < 0) {
_n = 0;
_k = 0;
}
int temp[] = new int[_k]; Permutation _p = new Permutation(_n, _k); for (int i = 0; i < _p.getSize(); ++i) {
_p.getElements(i, temp); if (isUniqueElement(temp) == true) {
ArrayList<Integer> Nums = new ArrayList<Integer>();
for (int j = 0; j < _k; ++j) {
Nums.add(temp[j]);
}
_E.add(Nums);
}
} } public int getN() {
return _n;
} public int getK() {
return _k;
} public void getElements(int count, int val[]) {
ArrayList<Integer> temp = new ArrayList<Integer>();
if (count < getSize()) {
temp = _E.get(count);
for (int i = 0; i < temp.size(); ++i) {
val[i] = temp.get(i);
}
}
} public String toString(int count) {
ArrayList<Integer> temp = new ArrayList<Integer>();
temp = _E.get(count);
String result = "";
for (int i = 0; i < _k; ++i) {
result += (temp.get(i) + 1);
if (i != _k - 1)
result += ",";
}
return result;
} public long getSize() {
long size = 0;
size = factorial(_n) / factorial(_n - _k) / factorial(_k);
return size;
} private long factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
} private boolean isUniqueElement(int val[]) {
java.util.Arrays.sort(val);
int temp[] = new int[_k];
for (int i = 0; i < _E.size(); ++i) {
getElements(i, temp);
java.util.Arrays.sort(temp);
boolean match = true;
for (int j = 0; j < temp.length; ++j) {
if (val[j] != temp[j]) {
match = false;
break;// ほんのちょっと時間節約
}
} if (match == true)
return false;
} return true;
}使用public static void main(String[] args) { int n = 11;
int k = 5; Combination c = new Combination(n, k); System.out.println("C(" + c.getN() + "," + c.getK() + ")="
+ c.getSize()); for (int i = 0; i < c.getSize(); ++i) {
System.out.println((i + 1) + ":" + c.toString(i));
}
}
一共462,如果你的控制台只显示了最后一部分。
请自行改成输出到文件,然后查看答案。
我都打了,没有只打印部分。 而是Eclipse控制台只显示了最后一部分。
在控制台里面(有输出内容后)右键--首选项--控制台缓冲区大小,设置得大大大一点就能显示所有的了。
问题如果搞定了的话,请结贴吧。
public class Test2
{ static int sum=0;
static int kind=0;
static int a[]=new int[6];
static int sumji[]=new int[46];
public static void main(String[] args)
{
dfs(1,12);
for(int i=15;i<=45;i++)
System.out.println("和="+i+" 共有 "+sumji[i]+"个.");
System.out.println("共有 "+kind+" 种组合.");
}
public static void dfs(int m,int n)
{
if(m==6)
{
if(sum(14,46))
{
for(int i=1;i<a.length;i++)
System.out.printf("%3d",a[i]);
System.out.println();
sum=0;
kind++;
}
}
else
{
for(int i=a[m-1]+1;i<n;i++)
{
a[m]=i;
dfs(m+1,n);
a[m]-=i;
}
}
}
public static boolean sum(int low,int high)
{
for(int i=1;i<a.length;i++) sum+=a[i];
if(sum>low &&sum<high)
{
sumji[sum]++;
System.out.print("和:"+sum);
sum=0;
return true;
}
sum=0;
return false;
}
}和:15 1 2 3 4 5
和:16 1 2 3 4 6
和:17 1 2 3 4 7
和:18 1 2 3 4 8
和:19 1 2 3 4 9
和:20 1 2 3 4 10
和:21 1 2 3 4 11
和:17 1 2 3 5 6
和:18 1 2 3 5 7
和:19 1 2 3 5 8
和:20 1 2 3 5 9
和:21 1 2 3 5 10
和:22 1 2 3 5 11
和:19 1 2 3 6 7
和:20 1 2 3 6 8
和:21 1 2 3 6 9
和:22 1 2 3 6 10
和:23 1 2 3 6 11
和:21 1 2 3 7 8
和:22 1 2 3 7 9
和:23 1 2 3 7 10
和:24 1 2 3 7 11
和:23 1 2 3 8 9
和:24 1 2 3 8 10
和:25 1 2 3 8 11
和:25 1 2 3 9 10
和:26 1 2 3 9 11
和:27 1 2 3 10 11
和:18 1 2 4 5 6
和:19 1 2 4 5 7
和:20 1 2 4 5 8
和:44 6 8 9 10 11
和:45 7 8 9 10 11
和=15 共有 1个.
和=16 共有 1个.
和=17 共有 2个.
和=18 共有 3个.
和=19 共有 5个.
和=20 共有 7个.
和=21 共有 10个.
和=22 共有 12个.
和=23 共有 16个.
和=24 共有 19个.
和=25 共有 23个.
和=26 共有 25个.
和=27 共有 29个.
和=28 共有 30个.
和=29 共有 32个.
和=30 共有 32个.
和=31 共有 32个.
和=32 共有 30个.
和=33 共有 29个.
和=34 共有 25个.
和=35 共有 23个.
和=36 共有 19个.
和=37 共有 16个.
和=38 共有 12个.
和=39 共有 10个.
和=40 共有 7个.
和=41 共有 5个.
和=42 共有 3个.
和=43 共有 2个.
和=44 共有 1个.
和=45 共有 1个.
共有 462 种组合.