乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 35|回复: 2

C 中的组合#

[复制链接]

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-7-2 21:40:07 | 显示全部楼层 |阅读模式
我发现了一个简洁的小代码块,可以帮助我解决一个问题,但我不知道如何让它满足我的需求。基本上,我想取一个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

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-7-6 08:03:50 | 显示全部楼层
您是要写入整数值“301305347”还是要写入“3013053457”的ascii字符
从CombinationSwithReption()返回一个IEnumerable<string>然后迭代该字符串中的每个字符char[]
CombinationsWithReption()对我来说没有任何意义。它似乎是递归的,只是为了得到一个空字符串,然后以其方式返回以获得所需的结果。也许你可以发布你想要的最终结果,我们可以从那里回来。
回复

使用道具 举报

24

主题

204

帖子

6

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
300
发表于 2015-7-6 09:23:13 | 显示全部楼层
好吧,我看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. 1 -> 301  =  100
  2.    2 -> 305  =  200
  3.    3 -> 347  =  300
  4.    4 -> 301 301  =  200
  5.    5 -> 301 305  =  300
  6.    6 -> 301 347  =  400
  7.    7 -> 305 301  =  300
  8.    8 -> 305 305  =  400
  9.    9 -> 305 347  =  500
  10.   10 -> 347 301  =  400
  11.   11 -> 347 305  =  500
  12.   12 -> 347 347  =  600
  13.   13 -> 301 301 301  =  300
  14.   14 -> 301 301 305  =  400
  15.   15 -> 301 301 347  =  500
  16.   16 -> 301 305 301  =  400
  17.   17 -> 301 305 305  =  500
  18.   18 -> 301 305 347  =  600
  19.   19 -> 301 347 301  =  500
  20.   20 -> 301 347 305  =  600
  21.   21 -> 301 347 347  =  700
  22.   22 -> 305 301 301  =  400
  23.   23 -> 305 301 305  =  500
  24.   24 -> 305 301 347  =  600
  25.   25 -> 305 305 301  =  500
  26.   26 -> 305 305 305  =  600
  27.   27 -> 305 305 347  =  700
  28.   28 -> 305 347 301  =  600
  29.   29 -> 305 347 305  =  700
  30.   30 -> 305 347 347  =  800
  31.   31 -> 347 301 301  =  500
  32.   32 -> 347 301 305  =  600
  33.   33 -> 347 301 347  =  700
  34.   34 -> 347 305 301  =  600
  35.   35 -> 347 305 305  =  700
  36.   36 -> 347 305 347  =  800
  37.   37 -> 347 347 301  =  700
  38.   38 -> 347 347 305  =  800
  39.   39 -> 347 347 347  =  900
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 00:39 , Processed in 0.187743 second(s), 58 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表