c# - 生成每个数字组合
问题描述
我有一个包含 100 个元素的数组,其中我随机选择 4 个(不能选择两次相同的元素)。我多次重复这个过程,试图得到每一种可能的组合。不过,必须有一种更有效的方法。
我将如何创建一个只创建所有可能组合的循环?
double[][] picked = new double[4][];
int[] chosen = new int[4];
Random rnd = new Random();
List<int> exclude = new List<int>();
int z = 0;
while (z < 4)
{
picked[z] = new double[rows];
int x = rnd.Next(0, rows);
if (exclude.Contains(x))
{
continue;
}
exclude.Add(x);
// do stuff with the chosen elements
z++;
}
编辑:链接到重复的问题是不同的,因为它允许选择重复的元素。
解决方案
当你说同一个元素不能被选中两次时,你的意思是你不能有,例如, (1 , 2, 3, 2) 因为“2”已经存在?如果您生成的元素的顺序很重要,并且不能重复,则称为Permutation without repitition。这是对理论的参考:https ://www.mathsisfun.com/combinatorics/combinations-permutations.html 关于您的循环情况,这可能会有所帮助: Permutation without repeat C#
推荐阅读
- virtualenv - 将fedora从31升级到33后python virtualenv失败
- android-studio - Android Studio 在任何新窗口打开时都超慢、滞后和崩溃 - Mac,需要帮助调试
- javascript - onbeforeunload 在 codeigniter 中不起作用
- javascript - 根据该数字的旧值更新字符串中的某个数字
- c++ - 从 qmake 转换为 cmake,我如何以相同的方式找到库?
- c++ - 在这种情况下哪个更有效:通过引用返回成员,还是作为指针返回?
- ruby-on-rails - 嵌套的 SCSS 样式在生产中不起作用
- python - TypeError: super(type, obj): obj 必须是类型的实例或子类型,仅当我的元类被导入时
- python - 为什么我只将第一个输入导出到 .txt 文件而不是所有输入?
- ios - testDeviceIdentifiers 的 AdMob kGADSimulatorID 编译错误