C# 值组合算法

问题描述

我现在有一个类,有两个属性值:publicclassValueInfo{publicValueInfo(stringid,stringvalue){this.m_ID=id;this.m_Value=value;}privatestringm_ID=string.Empty;publicstringID{get{returnthis.m_ID;}set{this.m_ID=value;}}privatestringm_Value=string.Empty;publicstringValue{get{returnthis.m_Value;}set{this.m_Value=value;}}}

现在该类的集合如下:IList<ValueInfo>valueInfos=newList<ValueInfo>();valueInfos.Add(newValueInfo("A","01"));valueInfos.Add(newValueInfo("A","02"));valueInfos.Add(newValueInfo("B","03"));valueInfos.Add(newValueInfo("B","04"));valueInfos.Add(newValueInfo("B","05"));valueInfos.Add(newValueInfo("C","06"));valueInfos.Add(newValueInfo("C","07"));

我想得到如下的结果:A:01,B:03,C:06A:01,B:03,C:07A:01,B:04,C:06A:01,B:04,C:07A:01,B:05,C:06A:01,B:05,C:07A:02,B:03,C:06A:02,B:03,C:07A:02,B:04,C:06A:02,B:04,C:07A:02,B:05,C:06A:02,B:05,C:07就是把A、B、C三个ID的值组合在一起,但是要注意的一点是此处只是举例是ABC三个ID,实际ID的值是不固定的,有可能是A、B、C、D......求高手赐教这个递归算法应该怎么样实现?

解决方案

解决方案二:
一个思路是利用余数的性质:按ID分组,设第k组(k从0开始)项数为m[k],总共n组,最终返回的组合数为所有m[k]的积,记为prod,对于0到prod-1的每个整数i,对于0到n-1的每个整数j,取出第j组的第i%m[j]个项,组成一个组合。如有必要,还可以使用yield语法构造一个枚举数来实现延迟计算。
解决方案三:
引用1楼yangyi_2009的回复:

一个思路是利用余数的性质:按ID分组,设第k组(k从0开始)项数为m[k],总共n组,最终返回的组合数为所有m[k]的积,记为prod,对于0到prod-1的每个整数i,对于0到n-1的每个整数j,取出第j组的第i%m[j]个项,组成一个组合。如有必要,还可以使用yield语法构造一个枚举数来实现延迟计算。

上面漏写了,取完余数以后还有次除法i/=m[j]
解决方案四:
回答很多次了http://bbs.csdn.net/topics/360265119
解决方案五:
不需要递归的usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace笛卡尔{classProgram{staticvoidMain(string[]args){List<ValueInfo>valueInfos=newList<ValueInfo>();valueInfos.Add(newValueInfo("A","01"));valueInfos.Add(newValueInfo("A","02"));valueInfos.Add(newValueInfo("B","03"));valueInfos.Add(newValueInfo("B","04"));valueInfos.Add(newValueInfo("B","05"));valueInfos.Add(newValueInfo("C","06"));valueInfos.Add(newValueInfo("C","07"));varid=valueInfos.Select(x=>x.ID).Distinct().ToList();varres=valueInfos.FindAll(x=>x.ID==id[0]).Select(x=>string.Format("{0}:{1}",x.ID,x.Value)).ToList();intlen=res.Count;intnext=1;inti=0;while(next<id.Count){len=res.Count;for(;i<len;i++){varlast=res[i];foreach(vartinvalueInfos.FindAll(x=>x.ID==id[next]).Select(x=>string.Format("{0}:{1}",x.ID,x.Value))){res.Add(last+","+t);}}next++;}res.RemoveRange(0,len);Console.WriteLine(string.Join("n",res));Console.ReadKey();}}publicclassValueInfo{publicValueInfo(stringid,stringvalue){this.m_ID=id;this.m_Value=value;}privatestringm_ID=string.Empty;publicstringID{get{returnthis.m_ID;}set{this.m_ID=value;}}privatestringm_Value=string.Empty;publicstringValue{get{returnthis.m_Value;}set{this.m_Value=value;}}}}

解决方案六:
你这个是笛卡尔乘积吧?用3重循环?
解决方案七:
笛卡尔乘积,果然回答过很多次了……
解决方案八:
多年前的回答竟然在这里再次看到了...
解决方案九:
既然每年都有一大批新人加入此道,重复的问题重复出现,又有什么可奇怪的如果说你们已经回答过了,那么请给出链接如果连你们自己都找不到,那就别怪人家是重复提问了
解决方案十:
赶紧贴一个,以示我回答过

时间: 2024-08-07 15:26:37

C# 值组合算法的相关文章

排列组合算法

    排列:从n个不同元素中,任取m(m<=n)个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列:从n个不同元素中取出m(m<=n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号A(n,m)表示. A(n,m)=n(n-1)(n-2)--(n-m+1)= n!/(n-m)! 此外规定0!=1     组合:从n个不同元素中,任取m(m<=n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合:从n个不同元素中取出m(m<=

Java实现全排列、组合算法

全排列 解法一: 输入一串字符,然后对字符进行全排列,如"abc",全排列结果为:"abc","acb","bac","bca","cab","cba". 分析:从字符串中选择一个作为第一个字符,然后对剩下的字符串进行全排列,如此递归下去,直到打印出全部排列.如:"abc": 1.选a作为第一个字符:"abc","ac

算法之排列算法与组合算法详解_C 语言

1. 前言 本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等. 2. 排列算法 常见的排列算法有: (A)字典序法 (B)递增进位制数法 (C)递减进位制数法 (D)邻位对换法 (E)递归法 介绍常用的两种: (1) 字典序法 对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列. [例]字符集{1,2,3},较小的数字较先,这样按字典序生成的全排列是:123,132,213,231,312,321. 生成给定全排列的下一个排列 所谓一个的

组合算法的PHP解答方法_php技巧

题目:组合算法:有一个数组a,有N 个元素,现在要求从中找出含有任意元素的所有组合个数. 解答:先看规律吧: 假设这个数组为array(1,2,3,4,5)那么M=5: 可能出现的组合为: 1个数字的组合个数: 5 2个数字的组合个数: 4+3+2+1 3个数字的组合个数: 3+2+1 4个数字的组合个数: 2+1 5个数字的组合个数: 1 很眼熟吧,就是一个逆序的9*9乘法表.除过第一行有M个组合外,其他的组合按乘法表来处理,2个FOR语句嵌套而已 代码: 复制代码 代码如下: $c = 5;

退火算法-java最优组合算法问题,编程实现字母最优组合生成最优解

问题描述 java最优组合算法问题,编程实现字母最优组合生成最优解 要求:输入A~K中的任意几个字母(无重复),对这些字母进行组合.输出最优组合的最小组数n和组合方案,使用java语言. 约束条件:A可以和B一组: A可以和E.F.G一组: C.D.H要单独分组: I可以和E.F.G一组: J可以和E.F.G一组: K可以和E.F.G一组: 如果可以,希望用退火算法的思想来解决本问题.毕设赶着要用这个算法,希望尽快提供解决方案,拜谢! 解决方案 两两组合,还是可以多个组合? 解决方案二: 必须是

K-均值聚类算法的种群初始化

问题描述 K-均值聚类算法的种群初始化 K-均值聚类算法的种群初始化时候,java代码里面,怎么加入预先设定好的2维数组,而不是随机生成?拜托各位大神了,马上就要交毕业设计,答辩了.拜托拜托. 解决方案 K-均值聚类算法K-均值聚类算法K-均值聚类算法 解决方案二: package org.algorithm; import java.util.ArrayList; import java.util.Random; /** * K均值聚类算法 */ public class Kmeans { p

密码-求哈希值的算法函数,来看看咯

问题描述 求哈希值的算法函数,来看看咯 由4位数字和字母组成的密码,只知道它哈希值的前10位--c2979c7124,能算出后面的数吗?密码是多少? 解决方案 http://blog.csdn.net/lyflower/article/details/2540300 解决方案二: 要问,你也得等到大赛结束之后再问啊! 解决方案三: 要问,你也得等到大赛结束之后再问啊!

谁有高效的从m个数里面取n个数的组合算法

问题描述 谁有高效的从m个数里面取n个数的组合算法 解决方案 解决方案二: 求全排列?解决方案三: m*(m-1)*(m-2)*...*(m-n+1)所有的解决方案四: 最容易理解的就是递归,但是其效率,实在不能使用.

字符串的组合算法问题的C语言实现攻略_C 语言

基本字符串组合问题 题目:输入一个字符串,输出该字符串中字符的所有组合.举个例子,如果输入abc,它的组合有a.b.c.ab.ac.bc.abc. 上面我们详细讨论了如何用递归的思路求字符串的排列.同样,本题也可以用递归的思路来求字符串的组合. 假设我们想在长度为n的字符串中求m个字符的组合.我们先从头扫描字符串的第一个字符.针对第一个字符,我们有两种选择:第一是把这个字符放到组合中去,接下来我们需要在剩下的n-1个字符中选取m-1个字符:第二是不把这个字符放到组合中去,接下来我们需要在剩下的n