忘记密码   免费注册 查看新帖 | 论坛精华区

ChinaUnix.net

  平台 论坛 博客 认证专区 大话IT HPC论坛 徽章 文库 沙龙 自测 下载 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
楼主: sunzhiguolu

小学一年级数学题 - 系列-3 [复制链接]

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-06-28 22:05 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-06-28 22:08 编辑

回复 20# 523066680
大神 能否用 7 楼的代码作为示例进行讲解,我想通过实际案例 加上大神通俗易懂的描述 对代码的理解会更清楚些。谢谢。
不急,您将语言好好组织一下。
另外,前面我说了。如果我能够从中受益 (学到知识, 积分不是问题 可以商量)。辛苦了。

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之山东
日期:2017-11-10 14:32:14
发表于 2017-06-28 22:12 |显示全部楼层
回复 21# sunzhiguolu

我就是用他的代码改了函数名、拆了两部分出来而已啊
少年,你的基础 ……  

我也不求积分,觉得你需要好好看书。

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
发表于 2017-06-28 22:26 |显示全部楼层
本帖最后由 sunzhiguolu 于 2017-06-28 22:28 编辑

回复 22# 523066680
是啊,基础不行才希望通过积分悬赏的形式 寻找技术强 热心 有耐心的大神解答一下。
比如:
多个层次的判断可以减少大量冗余的排列过程,例如第一个判断:
当容器数组达到3个元素,可以计算第一行是否和为15,不是的话可以提前退回,节省后面6个元素的排列过程。
后面的判断与此类似。
最后当容器数组的元素达到9个,且最后斜线合计也为15,对符合要求的排列顺序进行输出。

上贴所说,退回 退回到哪里,接下来处理过程会怎样执行。这些都没有讲清楚,怎能不让人提出疑问?
少年的基础的确不咋地,还麻烦大神多多指点。(在您没有失去耐心之前)

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之山东
日期:2017-11-10 14:32:14
发表于 2017-06-28 22:40 |显示全部楼层
本帖最后由 523066680 于 2017-06-28 23:20 编辑

回复 23# sunzhiguolu

你是在递归的部分不熟悉还是都不熟悉?我一直都是自学的,觉得可以自己消化的尽量自己消化。
只有这样才能提高解决问题的能力,不然会对求助解答产生依赖。
讲真如果你基础太少,别人实在没必要从非常基础的东西跟你说起,因为那会涉及一本书的很多内容,总结是可以总结的,但别人总归有工作要做。

元素排列的部分单独提取就是这些行,可以单独执行,加个print 可以观察数组的变化过程
  1. E_( [ 1 .. 9 ], [] );

  2. sub E_
  3. {
  4.     my ( $a, $b ) = @_;
  5.     #此处省略若干代码
  6.     E_( [ @$a[ 0 .. $_ - 1, $_ + 1 .. $#$a ] ], [ @$b, $a->[$_] ] )
  7.         for 0 .. $#$a;
  8. }
复制代码
转成直白点的代码就是
  1. func( [1..5], [] );

  2. sub func
  3. {
  4.     my ( $a, $b ) = (shift, shift);
  5.     print join(",", @{$b}), "\n" if ( $#$a < 0 );
  6.    
  7.     for my $idx ( 0 .. $#$a )
  8.     {
  9.         my @arr = @$a;
  10.         my @brr = @$b;

  11.         push @brr, $arr[$idx];   #get element, from @arr to @brr
  12.         splice( @arr, $idx, 1 ); #delete element from @arr

  13.         func( \@arr, \@brr );    #next level
  14.     }
  15. }
复制代码

分析代码的时候,可以自己对代码进行拆解,对中间插入 printf 来查看输出内容或者 尝试 perl -d xxx.pl 进入调试模式
也可以在草稿上画出代码演算的过程,相信很多人都经历过。

而你可能并没有这么做,也许是因为懒惰,不愿意有“多余”的付出。

最后,解释权应该交给 rubyish,谁让你写的那么短

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-06-29 04:49 |显示全部楼层
回复 18# sunzhiguolu

如果代码 添加了 use warnings; 该怎样改动一下?
OK,

add
  1. use warnings;
复制代码

NO warnings;
perl version 26, subversion 0 (v5.26.0)

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-06-29 05:02 |显示全部楼层
v2:
real        0m0.079s
user        0m0.065s
sys        0m0.004s

  1. #!/usr/bin/perl
  2. # version 26, subversion 0 (v5.26.0)

  3. use 5.010;

  4. explore();

  5. # ______________________ SUB ______________________

  6. sub explore { E_(0) }

  7. sub E_ {
  8.     my $n = shift;
  9.     state $b   = [ (0) x 4 ];
  10.     state $has = [ (0) x 10 ];
  11.     state $in = [ [ 0, 1 ], [ 2, 3 ], [ 0, 2 ], [ 1, 3 ], [ 0, 3 ] ];

  12.     if ( $n == 4 ) {
  13.         my ( @test, @x ) = (0) x 10;
  14.         $test[$_] = 1 for @$b;
  15.         
  16.         for my $i (@$in) {
  17.             my $it = $b->[ $i->[0] ] + $b->[ $i->[1] ];
  18.             return if $it < 6 or $it > 14;
  19.             $it = 15 - $it;
  20.             return if $test[$it]++;
  21.             push @x, $it;
  22.         }

  23.         return if $x[0] + $b->[3] + $x[2] != 15;
  24.         my @X = ( @$b[ 0, 1 ], $x[0], @$b[ 2, 3 ], @x[ 1 .. 4 ] );

  25.         say join ' ', @X[ 0, 1, 2 ];
  26.         say join ' ', @X[ 3, 4, 5 ];
  27.         say join ' ', @X[ 6, 7, 8 ];
  28.         say '-----';
  29.         return;
  30.     }

  31.     for my $it ( 1 .. 9 ) {
  32.         next if $has->[$it];
  33.         $has->[$it]++;
  34.         $b->[$n] = $it;
  35.         E_( $n + 1 );
  36.         $has->[$it]--;
  37.     }
  38. }

  39. __DATA__
  40. $_

复制代码

论坛徽章:
7
戌狗
日期:2013-12-15 20:43:38技术图书徽章
日期:2014-03-05 01:33:12技术图书徽章
日期:2014-03-15 20:31:17未羊
日期:2014-03-25 23:48:20丑牛
日期:2014-04-07 22:37:44巳蛇
日期:2014-04-11 21:58:0915-16赛季CBA联赛之青岛
日期:2016-03-17 20:36:13
发表于 2017-06-29 05:19 |显示全部楼层
回复 23# sunzhiguolu

kankan:
  1. 0 [0 1 2 3]   []
  2. 1 [1 2 3]     [0]
  3. 2 [2 3]       [0 1]
  4. 3 [3]         [0 1 2]
  5. 4 []          [0 1 2 3]
  6. 3 [2]         [0 1 3]
  7. 4 []          [0 1 3 2]
  8. 2 [1 3]       [0 2]
  9. 3 [3]         [0 2 1]
  10. 4 []          [0 2 1 3]
  11. 3 [1]         [0 2 3]
  12. 4 []          [0 2 3 1]
  13. 2 [1 2]       [0 3]
  14. 3 [2]         [0 3 1]
  15. 4 []          [0 3 1 2]
  16. 3 [1]         [0 3 2]
  17. 4 []          [0 3 2 1]
  18. 1 [0 2 3]     [1]
  19. 2 [2 3]       [1 0]
  20. 3 [3]         [1 0 2]
  21. 4 []          [1 0 2 3]
  22. 3 [2]         [1 0 3]
  23. 4 []          [1 0 3 2]
  24. 2 [0 3]       [1 2]
  25. 3 [3]         [1 2 0]
  26. 4 []          [1 2 0 3]
  27. 3 [0]         [1 2 3]
  28. 4 []          [1 2 3 0]
  29. 2 [0 2]       [1 3]
  30. 3 [2]         [1 3 0]
  31. 4 []          [1 3 0 2]
  32. 3 [0]         [1 3 2]
  33. 4 []          [1 3 2 0]
  34. 1 [0 1 3]     [2]
  35. 2 [1 3]       [2 0]
  36. 3 [3]         [2 0 1]
  37. 4 []          [2 0 1 3]
  38. 3 [1]         [2 0 3]
  39. 4 []          [2 0 3 1]
  40. 2 [0 3]       [2 1]
  41. 3 [3]         [2 1 0]
  42. 4 []          [2 1 0 3]
  43. 3 [0]         [2 1 3]
  44. 4 []          [2 1 3 0]
  45. 2 [0 1]       [2 3]
  46. 3 [1]         [2 3 0]
  47. 4 []          [2 3 0 1]
  48. 3 [0]         [2 3 1]
  49. 4 []          [2 3 1 0]
  50. 1 [0 1 2]     [3]
  51. 2 [1 2]       [3 0]
  52. 3 [2]         [3 0 1]
  53. 4 []          [3 0 1 2]
  54. 3 [1]         [3 0 2]
  55. 4 []          [3 0 2 1]
  56. 2 [0 2]       [3 1]
  57. 3 [2]         [3 1 0]
  58. 4 []          [3 1 0 2]
  59. 3 [0]         [3 1 2]
  60. 4 []          [3 1 2 0]
  61. 2 [0 1]       [3 2]
  62. 3 [1]         [3 2 0]
  63. 4 []          [3 2 0 1]
  64. 3 [0]         [3 2 1]
  65. 4 []          [3 2 1 0]
复制代码

论坛徽章:
120
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07巳蛇
日期:2014-05-09 16:43:18巨蟹座
日期:2014-10-23 17:48:38子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59
发表于 2017-06-29 06:23 |显示全部楼层
本帖最后由 jason680 于 2017-06-29 06:50 编辑

回复 22# 523066680

>> 少年,你的基础 ……  

简言之

7楼是 5楼 实例   ( 10楼也是 实例)
5楼是 7楼 说明/基础

5楼是基础,但他.....
只想要实例,看了实例又不懂......

基础工作 只能留给他 慢慢消化 才能提高....

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之山东
日期:2017-11-10 14:32:14
发表于 2017-06-29 10:10 |显示全部楼层
本帖最后由 523066680 于 2017-06-29 17:42 编辑

灵魂图解 —— 递归排列过程(请点开大图或者下载PDF,再次吐槽CU的附件下载方式,还得关注公众号扫二维码)

红色线是返回的过程,怕图片篇幅太大没有把第一层的全部过程放进去,自行脑补。

图解递归排列元素.pdf (399.77 KB, 下载次数: 1)
图解递归排列元素.png

评分

参与人数 2信誉积分 +20 收起 理由
rubyish + 10 GOOOD ~~
Windows19 + 10

查看全部评分

论坛徽章:
10
子鼠
日期:2014-10-11 16:46:482016科比退役纪念章
日期:2017-09-02 15:42:4715-16赛季CBA联赛之佛山
日期:2017-08-28 17:11:5515-16赛季CBA联赛之浙江
日期:2017-08-24 16:55:1715-16赛季CBA联赛之青岛
日期:2017-08-17 19:55:2415-16赛季CBA联赛之天津
日期:2017-06-29 10:34:4315-16赛季CBA联赛之四川
日期:2017-05-16 16:38:55黑曼巴
日期:2016-07-19 15:03:112015亚冠之萨济拖拉机
日期:2015-05-22 11:38:5315-16赛季CBA联赛之山东
日期:2017-11-10 14:32:14
发表于 2017-06-29 18:58 |显示全部楼层
伤心,良心做图,赞都没有
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP