今天同学问我一个问题,计算出来双色球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)); } }
相关推荐
基于C语言排列组合算法 排列组合是计算机科学中一个重要的概念,它广泛应用于数学、统计学、计算机科学等领域。排列组合问题的算法设计是指如何高效地生成所有可能的排列或组合。今天,我们将讨论基于C语言的排列...
excel VBA - 排列组合生成算法 - ,可快速生成指定项目的所有排列组合
Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客
在本压缩包“算法C语言实现(第1-4部分).zip”中,包含的是关于算法的详细实现,使用了C语言这一经典编程语言。C语言以其高效、灵活和接近硬件的特点,常被用于编写算法代码,特别是对于数据结构和算法的底层实现,它...
在“双色球复式全排列组合算法(中6保6)”中,重点在于生成所有可能的红球6个号码的组合,同时考虑到蓝球的选取。中6保6意味着至少要保证选中的6个红球中有至少6个与开奖号码相同。由于蓝球只有16个号码,所以只需...
在这个“基于C语言的排列组合算法”中,我们将深入探讨这两个概念以及如何使用C语言来实现它们。 排列是有限集合中的元素的一种有顺序的排列方式。在C语言中,我们可以使用递归方法来实现排列算法。首先,我们需要...
在编程领域,排列组合算法是解决许多问题的关键,特别是在数据处理、数据分析以及各种优化问题中。PHP作为一种流行的服务器端脚本语言,虽然不是为高性能计算而设计,但其丰富的库和简洁的语法使得实现这些算法变得...
排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...
例如:“双色球”第60期开奖号码为“02、04、06、17、21、28”6个红号相加总和为78。计算方法如下 : (78-2)÷2=38……0, 下期奖号可能出现08、18或28。 (78-4)÷4=18……2, 下期奖号可能出现08、18或28。 ...
在这个场景中,我们关注的是C语言实现的FP-growth算法。C语言以其高效性和灵活性,成为实现这种算法的理想选择,尤其是在处理大数据量时。 首先,我们要了解FP-growth的基本原理。它是由Han、Pei和Jia在2000年提出...
根据给定的文件信息,我们可以总结出以下关于C++中排列组合算法的知识点: ### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中...
在编程领域,排列组合是算法设计中的一个重要概念,它涉及到如何有效地生成所有可能的序列或组合作为问题的解决方案。本篇文章将详细讲解如何在Qt C++环境中实现排列组合的算法。 Qt是一个跨平台的C++图形用户界面...
在编程领域,排列组合算法是解决许多问题的关键技术,尤其在数据处理、数据分析以及优化问题中扮演着重要角色。在C#编程环境下,利用这些算法可以有效地生成所有可能的序列或者选择,帮助开发者构建出高效的解决方案...
例如,从7个红球中选出6个的组合数表示为C(7,6),即7个中选6个的方法数,计算公式为C(n,k)=n!/(k!(n-k)!),其中n!表示n的阶乘。 此外,文档中还提到了一些个人研究的中奖规律,比如买7个红球的情况,通过计算可以...
双色球游戏的基本规则是选取6个红球(范围在1到33之间)和1个蓝球(范围在1到16之间)。红球的奇偶比和和值是分析和预测的重要指标。奇偶比指的是红球中奇数和偶数的数量比例,而和值则是所有选中红球号码之和。这些...
在C语言中,算法是解决问题或执行任务的明确步骤,它是程序设计的基础。本文将针对C语言中的常用算法进行详细阐述,旨在帮助编程者更好地理解和应用这些基础算法,提升编程能力。 1. **排序算法**: - 冒泡排序:...
在IT领域,算法是解决问题的核心工具,而C语言由于其高效和灵活性,是实现算法的常见选择。本资源“算法:C语言实现第1-4部分基础知识、数据结构、排序及搜索”涵盖了C语言编程的基础知识,以及在计算科学中至关重要...
组合则是指不考虑顺序,只考虑元素选择的问题,组合的总数记为C(n, m)或n选m,计算公式为C(n, m) = P(n, m) / m!。 在HDU-1521这道题中,可能要求参赛者实现一个程序,用于计算特定条件下的排列或组合数量,或者找...
C语言基础算法习题集C-Practice-and-study-master.zip