C#遍历输出从n个数中选择m个数的不重复取数的所有组合

2024-03-19 09:20

本文主要是介绍C#遍历输出从n个数中选择m个数的不重复取数的所有组合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.不重复取数的C(n,m)组合数

2.编程实现C(5, 3)不重复取数的组合并遍历输出


1.不重复取数的C(n,m)组合数

        从集合中选择不重复元素的组合数可以用数学公式表示为:

C(n, m) = n! / (m!(n - m)!)
其中:
n! 表示 n 的阶乘,即 n × (n-1) × (n-2) × … × 3 × 2 × 1
m! 表示 m 的阶乘,即 m × (m-1) × (m-2) × … × 3 × 2 × 1
(n - m)! 表示 (n - m) 的阶乘,即 (n - m) × (n - m - 1) × (n - m - 2) × … × 3 × 2 × 1

        C(n, m) 表示从 n 个不同的元素中选择 m 个元素的组合数。在这个公式中,我们通过计算所有可能的排列并去除重复的排列来得到不重复的组合数。

2.编程实现C(5, 3)不重复取数的组合并遍历输出

        这个程序与作者的的可重复取数组合的程序类似,主要区别在于GenerateCombinations方法中的递归调用。在这个版本中,检查每个生成的组合是否包含当前的索引值。如果组合中不包含当前索引值,我们将其添加到结果中。这样,我们就可以确保生成的所有组合中的数字都是不重复的。

// 从n个数中选择m个数的不重复取数的所有组合namespace _152_2
{class Program{static void Main(string[] args){ArgumentNullException.ThrowIfNull(args);int n = 5; // 不重复的数的数量int m = 3; // 需要选择的不重复数的数量var combinations = GenerateCombinations(n, m).ToList();Console.WriteLine("从n={0}个不重复的数中选择m={1}个不重复数的组合数为:{2}", n, m, combinations.Count);Console.WriteLine("所有可能的组合:");foreach (var combination in combinations){Console.WriteLine(string.Join(", ", combination));}}static IEnumerable<IEnumerable<int>> GenerateCombinations(int n, int m){if (m == 0){yield return Enumerable.Empty<int>();}else{for (int i = 0; i < n; i++){foreach (var combination in GenerateCombinations(n, m - 1)){if (!combination.Contains(i)){yield return combination.Concat([i]);}}}}}}
}
//运行结果:
/*
从n=5个不重复的数中选择m=3个不重复数的组合数为:60
所有可能的组合:
2, 1, 0
3, 1, 0
4, 1, 0
1, 2, 0
3, 2, 0
4, 2, 0
1, 3, 0
2, 3, 0
4, 3, 0
1, 4, 0
2, 4, 0
3, 4, 0
2, 0, 1
3, 0, 1
4, 0, 1
0, 2, 1
3, 2, 1
4, 2, 1
0, 3, 1
2, 3, 1
4, 3, 1
0, 4, 1
2, 4, 1
3, 4, 1
1, 0, 2
3, 0, 2
4, 0, 2
0, 1, 2
3, 1, 2
4, 1, 2
0, 3, 2
1, 3, 2
4, 3, 2
0, 4, 2
1, 4, 2
3, 4, 2
1, 0, 3
2, 0, 3
4, 0, 3
0, 1, 3
2, 1, 3
4, 1, 3
0, 2, 3
1, 2, 3
4, 2, 3
0, 4, 3
1, 4, 3
2, 4, 3
1, 0, 4
2, 0, 4
3, 0, 4
0, 1, 4
2, 1, 4
3, 1, 4
0, 2, 4
1, 2, 4
3, 2, 4
0, 3, 4
1, 3, 4
2, 3, 4*/

这篇关于C#遍历输出从n个数中选择m个数的不重复取数的所有组合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825505

相关文章

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

XML重复查询一条Sql语句的解决方法

《XML重复查询一条Sql语句的解决方法》文章分析了XML重复查询与日志失效问题,指出因DTO缺少@Data注解导致日志无法格式化、空指针风险及参数穿透,进而引发性能灾难,解决方案为在Controll... 目录一、核心问题:从SQL重复执行到日志失效二、根因剖析:DTO断裂引发的级联故障三、解决方案:修复

SpringBoot+Redis防止接口重复提交问题

《SpringBoot+Redis防止接口重复提交问题》:本文主要介绍SpringBoot+Redis防止接口重复提交问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录前言实现思路代码示例测试总结前言在项目的使用使用过程中,经常会出现某些操作在短时间内频繁提交。例

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式

《C#实现将Office文档(Word/Excel/PDF/PPT)转为Markdown格式》Markdown凭借简洁的语法、优良的可读性,以及对版本控制系统的高度兼容性,逐渐成为最受欢迎的文档格式... 目录为什么要将文档转换为 Markdown 格式使用工具将 Word 文档转换为 Markdown(.