版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/tyn243222791/article/details/78549371
第七题
将日期写成YYYYMMDD的形式,然后转换成二进制,并逆序排列,然后再转换成十进制,如果与之前的日期相等则正确。查找1970-01-01到2020-07-24之间正确的日期。
#! perl
#20171108
use Date::Parse;
use strict;
my $startTime = "1 Jan 1970";
my $endTime = "24 Jul 2020";
my $startStamp = str2time($startTime);
my $endStamp = str2time($endTime);
for(my $i = $startStamp; $i <= $endStamp; $i = &nextDay($i)) {
&isRight($i);
}
sub nextDay {
my $date = @_[0];
my $dateNext = $date + 86400;
return $dateNext;
}
sub isRight {
my $date = @_[0];
my($sec,$min,$hour,$day,$mon,$year) = localtime($date);
$mon++;$year += 1900;
my $date_now = sprintf("%04d%02d%02d",$year,$mon,$day);
my $dateBin = sprintf("%b", $date_now);
my $dateBinRev = reverse $dateBin;
my $dateDnow = oct('0b' . $dateBinRev);
if($date_now eq $dateDnow) {
print $date_now, "\n";
}
return 0;
}
第八题
机器人可以前后左右移动,每次移动一步,不可以重复到达同一点。比如连续移动3次,则一共有36中路径。
求:连续移动12次,有多少种路径。
#!perl
#20171113
use strict;
# The 4 directions
my %direction = ('up' => '(0,1)',
'down' => '(0,-1)',
'left' => '(-1,0)',
'right' => '(1,0)');
# This method is used to get the total steps of something like a robot has moved,
# the robot can only move forward, backward, left and right with one step a time.
# And one place to go only once.
sub forward {
my $p = @_[0];
my @path = @$p;
my $step = 0;
my $length = @path;
# The robot can only move 12 steps;
if($length == 13) {
return 1;
}
if(@path) {
# direction loop
foreach(values %direction) {
my $temp = $_;
# forward
$temp = &move(@path[-1], $_);
# check the target place whether the robot has been to it
if(! grep {$_ eq $temp} @path) {# if not, move
# record the place
push @path,$temp;
# enter the iteration process
$step += &forward(\@path);
# pop the lastest place when the robot has explored one path
pop @path;
}
}
return $step;
}
}
my @path = qw/(0,0)/;
my $pp = \@path;
my $result = &forward($pp);
print "result $result \n";
# // this method is used to change the location
sub move {
my $src = @_[0];
my $tar = @_[1];
my @srcArr = split /,/, $src;
my $src_x = substr $srcArr[0], 1;
my $src_y = substr $srcArr[1], 0;
my @tarArr = split /,/, $tar;
my $tar_x = substr $tarArr[0], 1;
my $tar_y = substr $tarArr[1], 0;
my $res_x = $src_x + $tar_x;
my $res_y = $src_y + $tar_y;
my $res = "(" . $res_x . "," . $res_y . ")";
$res;
}
这道题用到了深度遍历算法,该算法的意思就是:一条道走到黑,撞墙之后回到上一个十字路口,换个方向继续走,一直到走完所有的路或者达到停止条件。
ps: 英文注释是为了提高自己的英文写作和阅读水平,以后还要多多练习
第九题
没明白题目…两组人数均等是什么意思?男女相等么?男生20人,女生10人,怎么分也不会均等啊。可能是我理解有问题。