`
ai_zxc
  • 浏览: 12358 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

双色球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));
    }
 
}

 

分享到:
评论

相关推荐

    excel VBA - 排列组合生成算法 - 可指定和值 - 可输出文本文件.xls

    excel VBA - 排列组合生成算法 - ,可快速生成指定项目的所有排列组合

    Java排列组合算法 - 郭睿的专栏 - CSDN博客

    Java排列组合算法 - 郭睿的专栏 - CSDN博客Java排列组合算法 - 郭睿的专栏 - CSDN博客

    算法C语言实现(第1-4部分).zip

    在本压缩包“算法C语言实现(第1-4部分).zip”中,包含的是关于算法的详细实现,使用了C语言这一经典编程语言。C语言以其高效、灵活和接近硬件的特点,常被用于编写算法代码,特别是对于数据结构和算法的底层实现,它...

    PHP实现多种类型的排列组合算法

    在编程领域,排列组合算法是解决许多问题的关键,特别是在数据处理、数据分析以及各种优化问题中。PHP作为一种流行的服务器端脚本语言,虽然不是为高性能计算而设计,但其丰富的库和简洁的语法使得实现这些算法变得...

    C#实现排列组合算法完整实例

    排列组合是常见的数学问题,本文就以完整实例形式讲述了C#实现排列组合算法的方法。分享给大家供大家参考之用。具体方法如下: 首先,数学中排列组合,可表示为:排列P(N,R) 其实排列实现了,组合也就实现了,组合...

    双色球算法-昵称-12-1建立文件+读取文件v0.02_20190924_1235.7z

    例如:“双色球”第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算法。C语言以其高效性和灵活性,成为实现这种算法的理想选择,尤其是在处理大数据量时。 首先,我们要了解FP-growth的基本原理。它是由Han、Pei和Jia在2000年提出...

    算法:C语言实现(第1-4部分)

    根据提供的标题、描述和标签,我们可以推测这本书主要讨论了如何使用C语言来实现常见的算法。虽然部分内容并未给出具体章节或示例代码,但我们仍然可以根据一般算法书籍的结构来进行推测性的总结。 ### 第一部分:...

    php双色球在线机选程序V1.0

    生了双色球红球部份的6个号码。当然,如果是复式机选,红球的个数则是 7~20个,所以如果是复式机选的话,红色球的个数根据具体的个数在1~33中产 生具体个数的红色号码. 2.然后再机选出蓝色球部份,也就是在数字1~...

    c++ 排列组合算法,代码简单

    根据给定的文件信息,我们可以总结出以下关于C++中排列组合算法的知识点: ### C++中的排列组合算法实现 #### 1. 排列算法(Permutation) 在C++中,排列算法通常用于生成一组元素的所有可能顺序。在给定的代码中...

    C经典算法之排列组合

    ### C经典算法之排列组合 #### 知识点解析 **排列组合**是计算机科学与数学中的一个重要概念,广泛应用于密码学、数据处理、优化问题等领域。本篇内容主要介绍了如何利用C语言实现一个基本的排列算法。 #### 排列...

    qtc++排列组合实现

    在编程领域,排列组合是算法设计中的一个重要概念,它涉及到如何有效地生成所有可能的序列或组合作为问题的解决方案。本篇文章将详细讲解如何在Qt C++环境中实现排列组合的算法。 Qt是一个跨平台的C++图形用户界面...

    双色球算法-昵称-12-1建立文件+读取文件4_20190910_1746.7z

    例如:“双色球”第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#编程环境下,利用这些算法可以有效地生成所有可能的序列或者选择,帮助开发者构建出高效的解决方案...

    双色球复式算法

    例如,从7个红球中选出6个的组合数表示为C(7,6),即7个中选6个的方法数,计算公式为C(n,k)=n!/(k!(n-k)!),其中n!表示n的阶乘。 此外,文档中还提到了一些个人研究的中奖规律,比如买7个红球的情况,通过计算可以...

    sha 算法c语言实现

    这意味着这个SHA算法的C语言实现已经被编译为可以在嵌入式平台上运行的二进制代码,并且已经在该特定硬件上进行了实际测试和验证,确保其功能正确性。 在提供的文件列表中,我们看到两个文件:`sha1.c`和`sha2.h`。...

    双色球算法-两个彩票站点v1.05-使用光雅园-梧桐山-宝安南路-和磡村-上一期-杀号定胆的数据+奇偶比+和值+除3+优化2-20200426-1640.7z

    双色球游戏的基本规则是选取6个红球(范围在1到33之间)和1个蓝球(范围在1到16之间)。红球的奇偶比和和值是分析和预测的重要指标。奇偶比指的是红球中奇数和偶数的数量比例,而和值则是所有选中红球号码之和。这些...

    c语言常用算法-----列举C语言各种常用算法

    在C语言中,算法是解决问题或执行任务的明确步骤,它是程序设计的基础。本文将针对C语言中的常用算法进行详细阐述,旨在帮助编程者更好地理解和应用这些基础算法,提升编程能力。 1. **排序算法**: - 冒泡排序:...

    算法:C语言实现第1-4部分基础知识、数据结构、排序及搜索

    在IT领域,算法是解决问题的核心工具,而C语言由于其高效和灵活性,是实现算法的常见选择。本资源“算法:C语言实现第1-4部分基础知识、数据结构、排序及搜索”涵盖了C语言编程的基础知识,以及在计算科学中至关重要...

Global site tag (gtag.js) - Google Analytics