好吧,我看CombinationwithReption时非常困惑,所以我把它加载到了一个新项目中。通过,一切都有意义。看了输出后,我想我明白你在找什么了。您需要从CombinationWithReption()返回一个IEnumerable<IEnumerable<T>如果假设正确,这就是我的想法
使用System.Collections.Generic
使用System.IO
使用System.Linq
名称空间组合01
{
课程计划
{
静态void Main(字符串[]参数)
{
var k=1
双vdForce=0
使用(var objWriter=newstreamwriter(@C:\Temp\Combinations.txt))
{
用于(变量计数=1;计数
{
var combos=combinationswithreption(新[]{301,305,347},计数)。选择(i=>i.ToArray())
foreach(组合中的var组合)
{
foreach(组合中的变量编号)
{
双vdTempVar=100
如果(数==305)vdTempVar=200
如果(数字=347)vdTempVar=300
vdForce=vdForce+vdTempVar
}
objWriter。WriteLine(“{0,4}->{1}={2}”,k,string.Join(“,combo),vdForce)
k=k+1
vdForce=0
}
}
}
}
静态IEnumerable
>组合表示(int[]输入,int长度)
{
如果(长度=1)
返回输入。选择(i=>new[]{i})
返回组合表示(输入,长度-1)
.SelectMany(t=>input,(t1,t2)=>t1.Concat(new[]{t2}))
}
}
}
输出如下所示。
- 1 -> 301 = 100
- 2 -> 305 = 200
- 3 -> 347 = 300
- 4 -> 301 301 = 200
- 5 -> 301 305 = 300
- 6 -> 301 347 = 400
- 7 -> 305 301 = 300
- 8 -> 305 305 = 400
- 9 -> 305 347 = 500
- 10 -> 347 301 = 400
- 11 -> 347 305 = 500
- 12 -> 347 347 = 600
- 13 -> 301 301 301 = 300
- 14 -> 301 301 305 = 400
- 15 -> 301 301 347 = 500
- 16 -> 301 305 301 = 400
- 17 -> 301 305 305 = 500
- 18 -> 301 305 347 = 600
- 19 -> 301 347 301 = 500
- 20 -> 301 347 305 = 600
- 21 -> 301 347 347 = 700
- 22 -> 305 301 301 = 400
- 23 -> 305 301 305 = 500
- 24 -> 305 301 347 = 600
- 25 -> 305 305 301 = 500
- 26 -> 305 305 305 = 600
- 27 -> 305 305 347 = 700
- 28 -> 305 347 301 = 600
- 29 -> 305 347 305 = 700
- 30 -> 305 347 347 = 800
- 31 -> 347 301 301 = 500
- 32 -> 347 301 305 = 600
- 33 -> 347 301 347 = 700
- 34 -> 347 305 301 = 600
- 35 -> 347 305 305 = 700
- 36 -> 347 305 347 = 800
- 37 -> 347 347 301 = 700
- 38 -> 347 347 305 = 800
- 39 -> 347 347 347 = 900
|