用Perl解决一道高中数学题

背景:在微博上见到一道简单的数学题 ,最近一直在学Perl编程,用Perl实现之,在代码中应用了几个高级技巧,加深了对Perl数组的理解。


问题: 一个将字符串“ ABCDEFG ”变成字符串“ CDABFGE ”的置换定义为一次运算, 则从字符 “一行白鹭上青天”开始, 经过  2011  次运算后得到的字符串为

  •  
  •  
  •  
  •  

Perl代码:

 
 
#######################################
# Desc: 用Perl解一道高中数学题(函数) #
# Author: thinkhy #
# Date: 05/26/2012 Sat #
# Reference:
#######################################
use strict ;
use utf8 ;

my $str = "一行白鹭上青天" ;
my @fun = ( 2 , 3 , 0 , 1 , 5 , 6 , 4 );
my @tran = ( split "" , $str )[ @fun ];

my @tranArray ;
push @tranArray , $str ;

while ( $str ne ( join "" , @tran ))
{
     push @tranArray , ( join "" , @tran );
     @tran = @tran [ @fun ];
}
binmode ( STDOUT , ':encoding(gb2312)' );
print join "\n" , @tranArray ;
my $cnt = 2011 % @ tranArray ;
print "\nFinal: " . $tranArray [ $cnt ] . "\n" ;


程序输出如下:

   一行白鹭上青天

白鹭一行青天上
一行白鹭天上青
白鹭一行上青天
一行白鹭青天上
白鹭一行天上青
Final: 白鹭一行青天上

   


Reference:

    1. 善科题库 http://www.mysanco.com/tiku/index.php?class=index&action=special_subject&tid=13997&rid=10

    2. 《Perl高效编程》  http://book.douban.com/subject/6146346/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值