免费注册 查看新帖 |

Chinaunix

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

怎么用变量表示一个数组中挨着的两个元素 [复制链接]

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-24 13:30 |只看该作者 |倒序浏览
本帖最后由 赛萌 于 2015-08-24 14:58 编辑

如一个数组@w=qw(1 3 6 8 14 15 21 23)
要求相邻的两个元素相减不超过5的这些元素截到新数组中,得到:
1 3 6 8
14 15
21 23

用perl怎么实现呢

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
2 [报告]
发表于 2015-08-24 15:18 |只看该作者
回复 1# 赛萌


    好像就是做一个循环,第一个元素不动,读第二个元素,如果第二个元素减第一个元素小于5,就把第二个元素跟到第一个元素的后面,如果大于5就把第二个元素存到一个新的数组中去,再循环第三个元素,让第三个元素减第二个元素,如果第三个元素减第二个元素小于5,就把第三个元素跟到第二个元素的后面,如果大于5就把第三个元素存到一个新的数组中去,如此循环下去,可以我不会写出变量的形式,

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
3 [报告]
发表于 2015-08-24 15:30 |只看该作者
本帖最后由 赛萌 于 2015-08-24 15:46 编辑

回复 1# 赛萌


哦,想错了

论坛徽章:
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
4 [报告]
发表于 2015-08-24 16:01 |只看该作者
本帖最后由 MMMIX 于 2015-08-25 10:30 编辑

回复 2# 赛萌


    基本上直接翻译就可以了:

  1. #!/usr/bin/perl

  2. use strict;
  3. use warnings;

  4. use v5.14;
  5. use Data::Dumper;

  6. sub split_array {
  7.     my ($diff, @arr) = @_;

  8.     my @subarrs;
  9.     while (@arr) {
  10.         my @subarr;
  11.         my $e1 = shift @arr;
  12.         push @subarr, $e1;

  13.         while (@arr) {
  14.             my $e2 = shift @arr;
  15.             if ($e2 - $e1 < $diff) {
  16.                 push @subarr, $e2;
  17.                 $e1 = $e2;
  18.             } else {
  19.                 unshift @arr, $e2;
  20.                 last;
  21.             }
  22.         }
  23.         push @subarrs, \@subarr;
  24.     }

  25.     \@subarrs;
  26. }

  27. my @arr = (1, 3, 6, 8, 14, 15, 21, 23);

  28. print Dumper(split_array 5, @arr);
复制代码

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
5 [报告]
发表于 2015-08-24 17:09 |只看该作者
回复 4# MMMIX


    谢谢,请受我三拜!

论坛徽章:
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
6 [报告]
发表于 2015-08-25 02:40 |只看该作者
biru:
  1. #!/usr/bin/perl

  2. my @W = qw/1 3 6 8 14 15 21 23/;
  3. my $P = 5;
  4. my @N = [];

  5. for (@W) {
  6.     $_ - ( $N[-1][-1] // $W[0] ) <= $P ? push @{ $N[-1] }, $_ : push @N, [$_];
  7. }

  8. print "@$_\n" for @N;
复制代码

论坛徽章:
10
2015亚冠之广州富力
日期:2015-06-16 14:44:332015亚冠之西悉尼流浪者
日期:2015-08-19 13:14:352015亚冠之阿尔希拉尔
日期:2015-08-04 09:38:052015亚冠之萨济拖拉机
日期:2015-07-31 15:01:582015亚冠之首尔
日期:2015-07-27 14:24:312015亚冠之塔什干火车头
日期:2015-07-20 09:47:202015亚冠之布里斯班狮吼
日期:2015-07-15 14:58:432015亚冠之首尔
日期:2015-07-07 09:31:262015亚冠之广州恒大
日期:2015-07-06 15:41:272015亚冠之首尔
日期:2015-08-27 11:03:01
7 [报告]
发表于 2015-08-25 09:08 |只看该作者
use strict;
use warnings;
my @w=qw(1 3 6 8 14 15 21 23 29);
for (my $i=0;$i<$#w;$i++)
{
        if ($w[$i+1]-$w[$i]<=5)
        {print "$w[$i] ";}
        else
        {print "$w[$i]\n";}
        }
print "$w[-1]";

论坛徽章:
1
狮子座
日期:2013-12-16 16:09:24
8 [报告]
发表于 2015-08-25 11:01 |只看该作者
rubyish 发表于 2015-08-25 02:40
biru:


rubyish 绝对是非人类,鉴定完毕

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
9 [报告]
发表于 2015-08-25 12:40 |只看该作者
回复 6# rubyish

不太明白$N[-1][-1] //$w[0]?
   

论坛徽章:
2
15-16赛季CBA联赛之山西
日期:2016-03-03 17:51:32CU十四周年纪念徽章
日期:2016-03-21 18:45:39
10 [报告]
发表于 2015-08-25 12:41 |只看该作者
回复 8# ttcn_cu


    嘿嘿,为什么这样说啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP