[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[问题求助] PowerShell如何完成编程比赛的几个题目?

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

1 竟然有shell编程大赛这玩意,真是好啊~~  我也应该搞个小赛,拉赞助先~~~
2 大赛的话,我肯定是不行了,我脑力太差,做题我都找枪手,玩大赛我也想这样干
3 不知道powershell能参赛不?
-----------------------------------------------
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

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

4 9 1
8 3 6
2 7 5

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

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

(需要给出解题的shell代码,以及该代码运行的结果,结果不唯一)
--------------------------------------------------------------
1 你都熟悉啥语言?
2 这道题你会做么?你怎么做?逻辑如何?
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

期待用PS代码把题目做完
nevermore

TOP

回复 3# PowerShell


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

TOP

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}
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

返回列表