2013-01-15 27 views
0

添加號碼數字串,我面臨着一些問題,同時在數字字符串添加值:如何在Perl

我有串,看起來像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:(

} 

請幫我出這個問題。

增加數量之後,我們必須加入該字符串並將其打印也:)

+1

是否允許10?你說「必須<10」,而且「如果總和> 10」。如果您不得不添加到倒數第二個位置,則添加相同的隨機數?在這種情況下,最後的位置保持不變嗎?當倒數第二的位置也會超出限制時會發生什麼? – ysth

+0

你正在實現一個「大整數」?你是否想從第一個到第二個添加數字?專欄,還是你的意思是「攜帶十位數字」? –

+0

看起來更像是一個mac地址,但爲什麼你會限制自己到10? – ikegami

回答

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

die "Overflow" if $overflow; 

$str = join ':', map sprintf('%02d', $_), @nums; 
+0

我認爲你想繼續努力超過最後兩個位置。如果你真的只想嘗試在最後兩個位置,使用'for(1..2)'代替。 – ikegami

+0

非常感謝ikegami! – Maverick

-1

我看到一個misstake:你做

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

pop只返回最後一個元素,而不是一個列表。

+0

你能否給我建議一些想法,以便我可以解決這個問題 – Maverick

0

我只是運行這個,它的工作原理。需要注意的是,字符串的最後一個數字越低,「if($ val> = 10)」將有效的機率越小

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 }