0

在数字字符串中添加值时遇到一些问题:

我有看起来像的字符串02:03:05:07:04:06。所有数字必须小于 10。现在,我必须从 1-9 中取一个随机数,并将该数字与字符串的最后一个位置编号相加(例如 3)。

我总和> 10,然后我将该数字添加到倒数第二个位置的数字中。

到目前为止,我有

#!/usr/bin/perl -w
use strict;
my $str='02:03:05:07:04:06';
my @arr=split(/:/,$str);
my @new_arr=pop(@arr);
my $rand_val=int(rand(9));
my $val=$new_arr[0]+$rand_val;
if($val>=10)
{
   I am unable to generate a logic here:(

}

请帮我解决这个问题。

添加数字后,我们必须加入字符串并打印它:)

4

4 回答 4

1
my $str = '02:03:05:07:04:06';
my @nums = split /:/, $str;
my $add = int(rand(9)) + 1;
my $overflow = 1;
for (1..@nums) {
   if ($num[-$_] + $add < 10) {
      $num[-$_] += $add;
      $overflow = 0;
      last;
   }
}

die "Overflow" if $overflow;

$str = join ':', map sprintf('%02d', $_), @nums;
于 2013-01-15T20:44:01.673 回答
0

这并不能解决您的 rand_val 可能为 0 的问题,但我将把它留给您解决。这应该为您提供您正在寻找的内容,即遍历数组中的值,直到随机值与数组中当前最后一个值的总和。

1  use strict;
2  my $str='02:03:05:07:04:06';
3  my @arr=split(/:/,$str);
4  my $rand_val=int(rand(9));
5  my $val;
6 
7  foreach my $i (reverse @arr){
8    $val = $i + $rand_val;
9    next if ($val >= 10);
10   print "val: $val, rand_val: $rand_val, value_used: $i\n";
11   last if ($val < 10);
12 }
于 2013-01-15T20:51:43.387 回答
0

我只是运行它并且它有效。需要注意的是,字符串的最后一个数字越小,“if ($val>=10)”有效的机会就越小

于 2013-01-15T20:45:25.423 回答
-1

我看到了一个错误:你知道

my @new_arr=pop(@arr);
(...)
my $val=$new_arr[0]+$rand_val;

pop只返回最后一个元素,而不是列表。

于 2013-01-15T20:28:37.233 回答