C 中的组合#
我发现了一个简洁的小代码块,可以帮助我解决一个问题,但我不知道如何让它满足我的需求。基本上,我想取一个int[],并用三个值填充它,分别是301、305和347。这帮助我建立了一个使用这三个整数的所有不同组合的列表,并进行了重复。到目前为止,我已经让它将它生成的内容的副本转储到文本文件中。我必须这样做,因为这很容易用Console.WriteLine填充缓冲区。我将是第一个承认我真的不太了解这段代码的人,除了我能让它工作到目前为止。但请不要以为我真的知道自己在做什么这似乎对置换非常有效,但我想,与所有递归代码一样,如果数组很大,这可能占用大量RAM。幸运的是,我只想计算三个整数的组合,每行最多有六个项目。顺便说一句,在这个文件中,等号右边的整数是不正确的。我还在做那部分
使用系统
使用System.IO
使用System.Collections.Generic
名称空间组合01
{
课程计划
{
静态void Main(字符串[]参数)
{
int k=1
双vdForce=0,vdTempVar
使用(StreamWriter objWriter=newstreamwrite(@“C:\Combinations.txt”)
{
用于(整数计数=1;计数
{
<div>foreach(组合中的var c表示(新int[]{301,305,347},计数))
{
foreach(c中的var-vf)
{
vdTempVar=100
如果(vf==305)vdTempVar=200
如果(vf==347)vdTempVar=300
vdForce=vdForce+vdTempVar
}
objWriter。写线(“{0,4}->{1}={2}”,k,c,vdForce)
k=k+1
vdForce=0
}
}
}
}
静态IEnumerable
组合表示(IEnumerale
输入,int长度)
{
如果(长度
<div>收益率收益>
其他
{
<div>foreach(输入中的var i)<div
foreach(组合中的var c表示(输入,长度-1))
产生收益i.ToString()+“”+c
}
}
}
}
编辑:kdub->code=csharp
**** Hidden Message ***** 您是要写入整数值“301305347”还是要写入“3013053457”的ascii字符
从CombinationSwithReption()返回一个IEnumerable<string>然后迭代该字符串中的每个字符char[]
CombinationsWithReption()对我来说没有任何意义。它似乎是递归的,只是为了得到一个空字符串,然后以其方式返回以获得所需的结果。也许你可以发布你想要的最终结果,我们可以从那里回来。 好吧,我看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
页:
[1]