急!!怎么用JAVA把彩票11选5的所有组合打印出来??另外,各位大哥,如果会的,麻烦再帮写下怎么把双色球的甩有组合结果也打印出来,刚老师布置的任务,不会啊

解决方案 »

  1.   

    Permutation.java
    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);
    } }}
      

  2.   

    还是要使用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,如果你的控制台只显示了最后一部分。
    请自行改成输出到文件,然后查看答案。
      

  3.   

    哦,看来问题是解决了,太谢谢了,这里还想多问个小问题哦,我才学JAVA几天不太懂,你这里说有55440行输入,程序里不是对每种可能结果都打印System.out.println()输出了么,怎么控制台里只输出最后一部分呢,如果想要完整地输出,要怎么弄哦
      

  4.   


    我都打了,没有只打印部分。 而是Eclipse控制台只显示了最后一部分。
    在控制台里面(有输出内容后)右键--首选项--控制台缓冲区大小,设置得大大大一点就能显示所有的了。
    问题如果搞定了的话,请结贴吧。
      

  5.   


    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 种组合.