免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2637 | 回复: 10
打印 上一主题 下一主题

【求助】一个关于数组取值的问题 [复制链接]

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-21 09:03 |只看该作者 |倒序浏览
求各位大神帮忙提供个思路,有代码更好,小弟万分感谢~

需求:

有一个数组,其内值如:[1,2,2,1,1,2,1,1,1,2,2,1,1,2,2....]  其内仅有1和2两个数,

我想从数组取出和等于4的所有组合,并打印输出,将不能组合为和4的所有数据选择出来,放到一个数组中返回


这个需求该怎么做呀?一直没想出来。。。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
2 [报告]
发表于 2015-07-21 10:32 |只看该作者
顶一个lollol

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
3 [报告]
发表于 2015-07-21 13:13 |只看该作者
LZ 什么意思
是这个意思

1 1 2        [11 12 13]
2 2        [10 13]
2 1 1        [10 11 12]
2 2        [9 13]
2 1 1        [9 11 12]
2 2        [9 10]
1 1 2        [8 12 13]
1 1 2        [8 11 13]
1 2 1        [8 10 12]
1 2 1        [8 10 11]
1 2 1        [8 9 12]
1 2 1        [8 9 11]
1 1 2        [7 12 13]
1 1 2        [7 11 13]
1 2 1        [7 10 12]
1 2 1        [7 10 11]
1 2 1        [7 9 12]
1 2 1        [7 9 11]
1 1 2        [7 8 13]
1 1 1 1        [7 8 11 12]
1 1 2        [7 8 10]
1 1 2        [7 8 9]
1 1 2        [6 12 13]
1 1 2        [6 11 13]
1 2 1        [6 10 12]
1 2 1        [6 10 11]
1 2 1        [6 9 12]
1 2 1        [6 9 11]
1 1 2        [6 8 13]
1 1 1 1        [6 8 11 12]
1 1 2        [6 8 10]
1 1 2        [6 8 9]
1 1 2        [6 7 13]
1 1 1 1        [6 7 11 12]
1 1 2        [6 7 10]
1 1 2        [6 7 9]
1 1 1 1        [6 7 8 12]
1 1 1 1        [6 7 8 11]
2 2        [5 13]
2 1 1        [5 11 12]
2 2        [5 10]
2 2        [5 9]
2 1 1        [5 8 12]
2 1 1        [5 8 11]
2 1 1        [5 7 12]
2 1 1        [5 7 11]
2 1 1        [5 7 8]
2 1 1        [5 6 12]
2 1 1        [5 6 11]
2 1 1        [5 6 8]
2 1 1        [5 6 7]
1 1 2        [4 12 13]
1 1 2        [4 11 13]
1 2 1        [4 10 12]
1 2 1        [4 10 11]
1 2 1        [4 9 12]
1 2 1        [4 9 11]
1 1 2        [4 8 13]
1 1 1 1        [4 8 11 12]
1 1 2        [4 8 10]
1 1 2        [4 8 9]
1 1 2        [4 7 13]
1 1 1 1        [4 7 11 12]
1 1 2        [4 7 10]
1 1 2        [4 7 9]
1 1 1 1        [4 7 8 12]
1 1 1 1        [4 7 8 11]
1 1 2        [4 6 13]
1 1 1 1        [4 6 11 12]
1 1 2        [4 6 10]
1 1 2        [4 6 9]
1 1 1 1        [4 6 8 12]
1 1 1 1        [4 6 8 11]
1 1 1 1        [4 6 7 12]
1 1 1 1        [4 6 7 11]
1 1 1 1        [4 6 7 8]
1 2 1        [4 5 12]
1 2 1        [4 5 11]
1 2 1        [4 5 8]
1 2 1        [4 5 7]
1 2 1        [4 5 6]
1 1 2        [3 12 13]
1 1 2        [3 11 13]
1 2 1        [3 10 12]
1 2 1        [3 10 11]
1 2 1        [3 9 12]
1 2 1        [3 9 11]
1 1 2        [3 8 13]
1 1 1 1        [3 8 11 12]
1 1 2        [3 8 10]
1 1 2        [3 8 9]
1 1 2        [3 7 13]
1 1 1 1        [3 7 11 12]
1 1 2        [3 7 10]
1 1 2        [3 7 9]
1 1 1 1        [3 7 8 12]
1 1 1 1        [3 7 8 11]
1 1 2        [3 6 13]
1 1 1 1        [3 6 11 12]
1 1 2        [3 6 10]
1 1 2        [3 6 9]
1 1 1 1        [3 6 8 12]
1 1 1 1        [3 6 8 11]
1 1 1 1        [3 6 7 12]
1 1 1 1        [3 6 7 11]
1 1 1 1        [3 6 7 8]
1 2 1        [3 5 12]
1 2 1        [3 5 11]
1 2 1        [3 5 8]
1 2 1        [3 5 7]
1 2 1        [3 5 6]
1 1 2        [3 4 13]
1 1 1 1        [3 4 11 12]
1 1 2        [3 4 10]
1 1 2        [3 4 9]
1 1 1 1        [3 4 8 12]
1 1 1 1        [3 4 8 11]
1 1 1 1        [3 4 7 12]
1 1 1 1        [3 4 7 11]
1 1 1 1        [3 4 7 8]
1 1 1 1        [3 4 6 12]
1 1 1 1        [3 4 6 11]
1 1 1 1        [3 4 6 8]
1 1 1 1        [3 4 6 7]
1 1 2        [3 4 5]
2 2        [2 13]
2 1 1        [2 11 12]
2 2        [2 10]
2 2        [2 9]
2 1 1        [2 8 12]
2 1 1        [2 8 11]
2 1 1        [2 7 12]
2 1 1        [2 7 11]
2 1 1        [2 7 8]
2 1 1        [2 6 12]
2 1 1        [2 6 11]
2 1 1        [2 6 8]
2 1 1        [2 6 7]
2 2        [2 5]
2 1 1        [2 4 12]
2 1 1        [2 4 11]
2 1 1        [2 4 8]
2 1 1        [2 4 7]
2 1 1        [2 4 6]
2 1 1        [2 3 12]
2 1 1        [2 3 11]
2 1 1        [2 3 8]
2 1 1        [2 3 7]
2 1 1        [2 3 6]
2 1 1        [2 3 4]
2 2        [1 13]
2 1 1        [1 11 12]
2 2        [1 10]
2 2        [1 9]
2 1 1        [1 8 12]
2 1 1        [1 8 11]
2 1 1        [1 7 12]
2 1 1        [1 7 11]
2 1 1        [1 7 8]
2 1 1        [1 6 12]
2 1 1        [1 6 11]
2 1 1        [1 6 8]
2 1 1        [1 6 7]
2 2        [1 5]
2 1 1        [1 4 12]
2 1 1        [1 4 11]
2 1 1        [1 4 8]
2 1 1        [1 4 7]
2 1 1        [1 4 6]
2 1 1        [1 3 12]
2 1 1        [1 3 11]
2 1 1        [1 3 8]
2 1 1        [1 3 7]
2 1 1        [1 3 6]
2 1 1        [1 3 4]
2 2        [1 2]
1 1 2        [0 12 13]
1 1 2        [0 11 13]
1 2 1        [0 10 12]
1 2 1        [0 10 11]
1 2 1        [0 9 12]
1 2 1        [0 9 11]
1 1 2        [0 8 13]
1 1 1 1        [0 8 11 12]
1 1 2        [0 8 10]
1 1 2        [0 8 9]
1 1 2        [0 7 13]
1 1 1 1        [0 7 11 12]
1 1 2        [0 7 10]
1 1 2        [0 7 9]
1 1 1 1        [0 7 8 12]
1 1 1 1        [0 7 8 11]
1 1 2        [0 6 13]
1 1 1 1        [0 6 11 12]
1 1 2        [0 6 10]
1 1 2        [0 6 9]
1 1 1 1        [0 6 8 12]
1 1 1 1        [0 6 8 11]
1 1 1 1        [0 6 7 12]
1 1 1 1        [0 6 7 11]
1 1 1 1        [0 6 7 8]
1 2 1        [0 5 12]
1 2 1        [0 5 11]
1 2 1        [0 5 8]
1 2 1        [0 5 7]
1 2 1        [0 5 6]
1 1 2        [0 4 13]
1 1 1 1        [0 4 11 12]
1 1 2        [0 4 10]
1 1 2        [0 4 9]
1 1 1 1        [0 4 8 12]
1 1 1 1        [0 4 8 11]
1 1 1 1        [0 4 7 12]
1 1 1 1        [0 4 7 11]
1 1 1 1        [0 4 7 8]
1 1 1 1        [0 4 6 12]
1 1 1 1        [0 4 6 11]
1 1 1 1        [0 4 6 8]
1 1 1 1        [0 4 6 7]
1 1 2        [0 4 5]
1 1 2        [0 3 13]
1 1 1 1        [0 3 11 12]
1 1 2        [0 3 10]
1 1 2        [0 3 9]
1 1 1 1        [0 3 8 12]
1 1 1 1        [0 3 8 11]
1 1 1 1        [0 3 7 12]
1 1 1 1        [0 3 7 11]
1 1 1 1        [0 3 7 8]
1 1 1 1        [0 3 6 12]
1 1 1 1        [0 3 6 11]
1 1 1 1        [0 3 6 8]
1 1 1 1        [0 3 6 7]
1 1 2        [0 3 5]
1 1 1 1        [0 3 4 12]
1 1 1 1        [0 3 4 11]
1 1 1 1        [0 3 4 8]
1 1 1 1        [0 3 4 7]
1 1 1 1        [0 3 4 6]
1 2 1        [0 2 12]
1 2 1        [0 2 11]
1 2 1        [0 2 8]
1 2 1        [0 2 7]
1 2 1        [0 2 6]
1 2 1        [0 2 4]
1 2 1        [0 2 3]
1 2 1        [0 1 12]
1 2 1        [0 1 11]
1 2 1        [0 1 8]
1 2 1        [0 1 7]
1 2 1        [0 1 6]
1 2 1        [0 1 4]
1 2 1        [0 1 3]

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
4 [报告]
发表于 2015-07-21 14:35 |只看该作者
回复 3# substr函数


没看明白你的。。。


我的目的是将保存了很多 1、2 的数组中随机取出一行和为 4  的组合,数组中每个值仅能用一次


   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
5 [报告]
发表于 2015-07-21 15:33 |只看该作者
回复 1# qq27898

没看明白你的目的
举个栗子呀
   

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
6 [报告]
发表于 2015-07-21 16:11 |只看该作者
回复 5# substr函数


比如我又一个数组 $arr = array(2,1,1,1,2,1,1,2,2,2,1,1,1); 内部一共13个数字

我要找到如下组合:

2 1 1
1 2 1
1 2 1
2    2
1 1

基本每行和都为4



   

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
7 [报告]
发表于 2015-07-21 16:47 |只看该作者
lz 两个

2 1 1
1 2 1
1 2 1
2    2
1 1

2 1 1
1 2 1
1 2 1
2  1 1
2
这些东西
LZ 具体哪一个


论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2015-07-21 16:55 |只看该作者
回复 7# substr函数


两个都行,只要符合行的和为4即可,辛苦了


   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
9 [报告]
发表于 2015-07-21 17:11 |只看该作者
回复 6# qq27898


    逐个试验一遍就都有了:

  1. sub allpattern {
  2.     my ($r, $sum) = @_;

  3.     my @pats;

  4.     for my $i (0 .. $#{$r}) {
  5.         my (@pat, $tsum);
  6.         for my $j ($i .. $#{$r}) {
  7.             push @pat, $r->[$j];
  8.             $tsum += $r->[$j];
  9.             if ($tsum >= $sum) {
  10.                 push @pats, \@pat if $tsum == $sum;
  11.                 last;
  12.             }
  13.         }
  14.     }
  15.     return @pats;
  16. }

  17. allpattern(\@arr, 4);
复制代码

论坛徽章:
26
2015亚冠之胡齐斯坦钢铁
日期:2015-06-25 21:40:202015亚冠之柏斯波利斯
日期:2015-08-31 17:03:192015亚冠之柏斯波利斯
日期:2015-11-07 13:10:00程序设计版块每日发帖之星
日期:2015-11-10 06:20:00每日论坛发贴之星
日期:2015-11-10 06:20:00程序设计版块每日发帖之星
日期:2015-11-26 06:20:00程序设计版块每日发帖之星
日期:2015-12-02 06:20:00黄金圣斗士
日期:2015-12-07 17:57:4615-16赛季CBA联赛之天津
日期:2015-12-23 18:34:14程序设计版块每日发帖之星
日期:2016-01-02 06:20:00程序设计版块每日发帖之星
日期:2016-01-06 06:20:00每日论坛发贴之星
日期:2016-01-06 06:20:00
10 [报告]
发表于 2015-07-21 19:28 |只看该作者
符合了
2 2
1 1 2
1 1 1 1
2 2
2 2
1
  1. #!/usr/bin/perl -w
  2. use 5.010;

  3. my @A = ( 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 2, 2 );
  4. my @B = GREP( 4, @A );

  5. say "@$_" for @B;

  6. sub GREP {
  7.     my ( $TOTAL, @A ) = @_;
  8.     my @RETURN = ();

  9.   TRY:
  10.     my @TMP = ();
  11.     my $SUM = 0;
  12.     my $TRY = 0;

  13.     for (@A) {
  14.         if ( $SUM + $_ > $TOTAL ) { next }
  15.         push @TMP, $_;
  16.         $SUM += $_;
  17.         $_ = 0;

  18.         if ( $SUM == $TOTAL ) {
  19.             push @RETURN, [@TMP];
  20.             $TRY = 1;
  21.             $SUM = 0;
  22.             @TMP = ();
  23.         }
  24.     }

  25.     @A = grep { $_ } @A;
  26.     if ($TRY) {

  27.         # TOTAL = 5, A = [2, 1, 1, 2]
  28.         # ERROR: push @A, @TMP
  29.         @A = sort { $b <=> $a } @A, @TMP;
  30.         goto TRY;
  31.     }

  32.     push @RETURN, [ @A, @TMP ];
  33.     return @RETURN;
  34. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP