Board logo

标题: [问题求助] PowerShell如何完成编程比赛的几个题目? [打印本页]

作者: awk    时间: 2013-7-5 22:40     标题: PowerShell如何完成编程比赛的几个题目?

我在别的论坛看到编程比赛的几个题目,我想用PowerShell试试,但是基础太差。
http://bbs.chinaunix.net/thread-4086457-1-1.html
各位大侠能否给出代码让我学习一下?
作者: PowerShell    时间: 2013-7-6 11:10

1 竟然有shell编程大赛这玩意,真是好啊~~  我也应该搞个小赛,拉赞助先~~~
2 大赛的话,我肯定是不行了,我脑力太差,做题我都找枪手,玩大赛我也想这样干
3 不知道powershell能参赛不?
-----------------------------------------------
作者: PowerShell    时间: 2013-7-6 11:18

把1~9 九個數字分成三組三位數(不可重复使用),比如形成如下的9宫格。

4 9 1
8 3 6
2 7 5

求三行和三列数的总和,如上面的例子,得到一个总和: 491 + 836 + 275 + 482 + 937 + 165 =  3186

题目要求,所有的三位数都必须是奇数,总和是 4446.  求出这个九宫格排列。

(需要给出解题的shell代码,以及该代码运行的结果,结果不唯一)
--------------------------------------------------------------
1 你都熟悉啥语言?
2 这道题你会做么?你怎么做?逻辑如何?
作者: ShadowFiend    时间: 2013-7-6 16:21

期待用PS代码把题目做完
作者: awk    时间: 2013-7-7 18:31

回复 3# PowerShell


1、说来惭愧,很多语言都是只懂点皮毛。
2、不会做,所以才来请教论坛各位大侠的。但我觉得吧,这题应该用算法来搞定,暴力穷举显示是最愚蠢的做法。
作者: PowerShell    时间: 2013-7-12 10:34

3楼题目的解题powershell代码,某牛人写的,不是我,呵呵,他是我请的做作业的枪手,我验证通过。3楼题我之所以发出来,是想用powershell+excel解。当然了,这种解法(powershell+excel)很麻烦。但这正是我想提供给各位的解题思路。可惜一直没空闲时间,唉,半年内争取做完此作业。
------------------------------------------------------
  1. #根据条件列出可能的组合
  2. $jgg=New-Object system.collections.arraylist
  3. $sudu=New-Object psobject|select id,numble
  4. $sudu.id=1,1
  5. $sudu.numble=2,4,6,8
  6. $jgg.add($sudu)|out-null
  7. $sudu=New-Object psobject|select id,numble
  8. $sudu.id=1,2
  9. $sudu.numble=2,4,6,8
  10. $jgg.add($sudu)|out-null
  11. $sudu=New-Object psobject|select id,numble
  12. $sudu.id=1,3
  13. $sudu.numble=3,5,7,9
  14. $jgg.add($sudu)|out-null
  15. $sudu=New-Object psobject|select id,numble
  16. $sudu.id=2,1
  17. $sudu.numble=2,4,6,8
  18. $jgg.add($sudu)|out-null
  19. $sudu=New-Object psobject|select id,numble
  20. $sudu.id=2,2
  21. $sudu.numble=2,4,6,8
  22. $jgg.add($sudu)|out-null
  23. $sudu=New-Object psobject|select id,numble
  24. $sudu.id=2,3
  25. $sudu.numble=3,5,7,9
  26. $jgg.add($sudu)|out-null
  27. $sudu=New-Object psobject|select id,numble
  28. $sudu.id=3,1
  29. $sudu.numble=3,5,7,9
  30. $jgg.add($sudu)|out-null
  31. $sudu=New-Object psobject|select id,numble
  32. $sudu.id=3,2
  33. $sudu.numble=3,5,7,9
  34. $jgg.add($sudu)|out-null
  35. $sudu=New-Object psobject|select id,numble
  36. $sudu.id=3,3
  37. $sudu.numble=1
  38. $jgg.add($sudu)|out-null
  39. $jgg
  40. #设置校验方法
  41. function csan($j0,$j1,$j2,$j3,$j4,$j5,$j6,$j7,$j8){
  42. if(
  43. $j0*100+$j1*10+$j2+
  44. $j3*100+$j4*10+$j5+
  45. $j6*100+$j7*10+$j8+
  46. $j0*100+$j3*10+$j6+
  47. $j1*100+$j4*10+$j7+
  48. $j2*100+$j5*10+$j8 -eq 4446){$outs.add($($j0,$j1,$j2,$j3,$j4,$j5,$j6,$j7,$j8 -join ","))}
  49. }
  50. #开始排列
  51. $global:outs=New-Object system.collections.arraylist
  52. foreach($j0 in $jgg[0].numble){
  53. foreach($j1 in $jgg[1].numble){
  54. foreach($j2 in $jgg[2].numble){
  55. foreach($j3 in $jgg[3].numble){
  56. foreach($j4 in $jgg[4].numble){
  57. foreach($j5 in $jgg[5].numble){
  58. foreach($j6 in $jgg[6].numble){
  59. foreach($j7 in $jgg[7].numble){
  60. $j8=1
  61. csan $j0 $j1 $j2 $j3 $j4 $j5 $j6 $j7 $j8
  62. }}}}}}}}
  63. #删除数据重复的结果
  64. $global:outs|?{$($_.split(",")|group).count -eq 9}
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2