当前位置: 首页 > news >正文

参数的排列组合

参数的排列组合
比如一个参数的取值范围是[a,b,c,d],那么有哪些组合呢?

个数取值可能组合的个数
一个值a,b,c,d4
两个值ab,ac,ad,bc,bd,cd6
三个值无a,无b,无c,无d4
四个值abcd1

组合
如果ab,和ba算不同,那么有多少种可能呢?

个数取值可能(factorial)排列组合的个数重复的遍数(ab和ba算重复)
一个值441个元素的排列(1的阶乘)
两个值4*3122个元素的排列(2的阶乘)
三个值4*3*2243个元素的排列(3的阶乘)
四个值4*3*2*1244个元素的排列(4的阶乘)

为什么n个元素的排列数就是n的阶乘呢?
首先明白什么是阶乘?
1的阶乘是1
2的阶乘是2*1
3的阶乘是3*2*1
6的阶乘是6*5*4*3*2*1

我们有n个盒子,分别放置n个元素
第一回:我们从n个里面选择一个:有n种可能
第二回:我们从n-1个里面选择一个:有n-1种可能
第三回:我们从n-2个里面选择一个:有n-2种可能
第四回:我们从n-3个里面选择一个:有n-3种可能
……
最后我们只有一个可选
排列

/***
     * 部分阶乘
     * @param base
     * @param times
     * @return
     */
    public static int factorial(int base,int times){
        int sum=1;
        for(int i=0;i<times;i++){
            sum=sum*base;
            base--;
            if(base==0){
                break;
            }
        }
        return sum;
    }
/***
     * 排列
     * @param n
     * @return
     */
    public static int arrayArrange(int n){
        if(n<2){
            return 1;
        }else{
            return n*arrayArrange(n-1);
        }
    }
@Test
    public void test_arg(){
        int argCount=4;
        Assert.assertEquals(1,getParameterSum(1));
        Assert.assertEquals(3,getParameterSum(2));
        Assert.assertEquals(7,getParameterSum(3));
        Assert.assertEquals(15,getParameterSum(4));
        System.out.println(getParameterSum(argCount));
    }

    /***
     * 参数的取值个数,ab和ba算一种
     * @param argCount
     * @return
     */
    public static int getParameterSum(int argCount){
        int sum=0;
        for(int i=0;i<argCount;i++){
            int count=i+1;//参数组合的个数
            sum+=(factorial(argCount,count)/arrayArrange(count));

        }
        return sum;
    }

参考:参数的排列组合3
参数的排列组合2

相关文章:

  • 在当今快节奏的软件更迭当中,我们是否还需要进行系统的学习?
  • JSTL截取字符串
  • Java开发相关配置
  • Java BIO、NIO、AIO-------转载
  • JSPatch
  • RSA加密的测试demo
  • 用 Python 开发自动化测试脚本
  • 运用.net core配合VS 2015制作nuget包
  • linux shell数据重定向(输入重定向与输出重定向)详细分析 上(转)
  • PHP开发学习门户改版效果图投票
  • 收到云栖社区发的淘公仔礼物
  • d语言之模块化
  • 7.12 Models -- Frequently Asked Questions
  • Mysql错误问题记录
  • PostgreSQL wal receiver 统计信息 patch
  • (ckeditor+ckfinder用法)Jquery,js获取ckeditor值
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • css布局,左右固定中间自适应实现
  • Cumulo 的 ClojureScript 模块已经成型
  • ES10 特性的完整指南
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript创建对象的四种方式
  • JS实现简单的MVC模式开发小游戏
  • Linux gpio口使用方法
  • Markdown 语法简单说明
  • vue脚手架vue-cli
  • Vultr 教程目录
  • 基于遗传算法的优化问题求解
  • 将回调地狱按在地上摩擦的Promise
  • 强力优化Rancher k8s中国区的使用体验
  • 设计模式(12)迭代器模式(讲解+应用)
  • 微信开放平台全网发布【失败】的几点排查方法
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 我的zsh配置, 2019最新方案
  • 白色的风信子
  • 7行Python代码的人脸识别
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • #Js篇:单线程模式同步任务异步任务任务队列事件循环setTimeout() setInterval()
  • #Spring-boot高级
  • (12)Linux 常见的三种进程状态
  • (3)(3.5) 遥测无线电区域条例
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (SpringBoot)第七章:SpringBoot日志文件
  • (zhuan) 一些RL的文献(及笔记)
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)JAVA中的堆栈
  • (转)程序员技术练级攻略
  • (转)树状数组
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET导入Excel数据
  • .net和php怎么连接,php和apache之间如何连接