在数字字符串中添加值时,我遇到了一些问题:
我的字符串看起来像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:(
}
请帮我解决这个问题。
添加号码后,我们必须加入字符串并打印它:)
答案 0 :(得分: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;
答案 1 :(得分:0)
我只是运行它,它的工作原理。需要注意的是,字符串的最后一个数字越小,“if($ val&gt; = 10)”有效的可能性就越小
答案 2 :(得分: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 }
答案 3 :(得分:-1)
我看到了一个错误:你做了
my @new_arr=pop(@arr);
(...)
my $val=$new_arr[0]+$rand_val;
但pop
仅返回最后一个元素,而不是列表。