admin 管理员组文章数量: 887053
双色球33选6红球 排列组合算法 C(33,6)
今天同学问我一个问题,计算出来双色球33选6个红球排列组合所有的组合,要求最小化算法时间。
1,23,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33
排列组合后总共有1107568中情况(1107568 = 33!/(33-6)!*6!)
下面java代码为计算所有情况算法,去掉IO后,耗时15ms。
其中算法核心为:最小组合(1,2,3,4,5,6) , 最大组合(28,29,30,31,32,33), 每一组组合规律为 (A<B<C<D<E<F) 。
package c;import java.io.FileNotFoundException;/*** 排列组合* @author 咋个办呢*/
public class PermutationsCombinations {/*** 递归算法核心* @param pce* @param w* @param m*/private static void calpce(int[] pce , int w , int m){if(pce[w]+1>(m-pce.length+w+1)){if(w>0){calpce(pce, w-1, m) ;pce[w] = pce[w-1]+1 ;}else{pce[w] = pce[w]+1 ;}}else{pce[w] = pce[w]+1 ;}}private static int sumCount(int m , int n){int a=1 ,c=1 ;for(int _m=m ; _m>(m-n) ; _m-- ){a = a * _m ;}for(int _n=n ; _n>0 ; _n--){c = c*_n ;}return a/c ;}public static void main(String[] args) throws FileNotFoundException {int[] pces = new int[33] ;for(int i=0 ; i<pces.length ; i++){pces[i] = i + 1 ;if(i%11==0){System.out.println();}System.out.print(pces[i]+",");}System.out.println();int sumc = sumCount(33, 6) ;System.out.println("排列组合后共有"+sumc+"个组合。");int[] pce = new int[]{1,2,3,4,5,6} ;int count = 0 ;long t1 = System.currentTimeMillis() ;while(count<=sumc){count++ ;
// System.out.println(String.format("[%d,%d,%d,%d,%d,%d]",pce[0],pce[1],pce[2],pce[3],pce[4],pce[5]));calpce(pce, 6-1, 33);}long t2 = System.currentTimeMillis() ;System.out.println("耗时:"+(t2-t1)+"ms,计数总数:"+(count-1));}}
本文标签: 双色球33选6红球 排列组合算法 C(33 6)
版权声明:本文标题:双色球33选6红球 排列组合算法 C(33,6) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1694648984h254505.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论