C#实现 定向计算小工具
点此下载
程序使用WIN7 64位,VS2015 C#开发:线程的运用,进度时间的估算,排列组合,泛型,递归,算法设计
打开界面:
执行过程界面:
仅为了验证小时候的一些想法 长大了 当拥有了更强大的工具后 再回过头去看那些曾经的难题 不过都是一些不值一提的小事而已
算法步骤:
1、对输入值提取(正则应用 空格分割)
2、输入值求排列(泛型 主要难点是不能有重复的)
比如:1 1 1 2只有如下组合
[1,1,1,2]
[1,1,2,1]
[1,2,1,1]
[2,1,1,1]
参考:
[1]: 泛型求排列 http://www.cnblogs.com/kissdodog/p/5419981.html
[2]: 去重复 http://blog.csdn.net/brucehb/article/details/9731251
[2]: 去重复 http://blog.csdn.net/cristianojason/article/details/51200078
[3]: 去重复 http://blog.csdn.net/fern_girl/article/details/70339961
3、对使用的2元运算法则求全组合(使用N进制的加法 数组实现)
定义:
值 | 运算法则 |
---|---|
1 | 加法 |
2 | 减法 |
3 | 乘法 |
4 | 除法 |
5 | 幂 |
6 | 开方 |
假设选择了 加法 减法 除法 [1,2,4]
步骤1:生成3进制(选择了3个运算法则)数组List 总量为3的(N个运算值-1)次方
[0,0,0]
[0,0,1]
[0,0,2]
[0,1,0]
[0,1,1]
[0,1,2]
[0,2,0]
[0,2,1]
[0,2,2]
[1,0,0]
。。。
[2,2,2]
步骤2:对应提取选择的运算方法
[+,+,+]
[+,+,-]
[+,+,/]
。。。
[/,/,/]
4、对同一组运算方法进行求运算顺序(即加括号)程序不考虑运算满足交换律的情况
比如:a+b+c+d
顺序1:((a+b)+c)+d 对应为:[1,2,3]
顺序2:(a+b)+(c+d) 对应为:[1,3,2]
顺序3:(a+(b+c))+d 对应为:[2,1,3]
。。。
比如:a+b+c+d+e
顺序1:(((a+b)+c)+d)+e 对应为:[1,2,3,4]
顺序2:((a+b)+c)+(d+e) 对应为:[1,2,4,3]
顺序3:((a+b)+(c+d))+e 对应为:[1,3,2,4]
顺序4:((a+b)+c)+(d+e) 对应为:[1,3,4,2]
。。。
其中依然有重复的部分 在最后去重
所以还是一个求排列的方式
最后3层嵌套For循环计算
for 运算数据无重复排序
for 运算法则全排序
for 运算顺序排序