它將輸入的一個數字(字符串)作爲輸入,然後任務是刪除n個數字以給出最終可能的最小編號,但是您必須注意順序,這是約束。您無法更改原始數字的順序。通過從給定數字中刪除n位數來創建最低編號
我希望它在O(n)的工作,所以我這樣做:
#!/usr/bin/perl
#lowestNS.pl
#Date: 2016-06-28
use warnings;
use strict;
use utf8;
(@ARGV == 2) or die "2 args needed";
my $num = $ARGV[0];
my $d = $ARGV[1];
my @arr;
int($num) > 0 or die "Enter positive number";
print "Number in: $num\nDel: $d\n";
if(int($num) == 0) {
print "Result: 0\n";
exit;
}
else {
my $str = $num;
@arr = split(//, $str); #/Split on each number
#Split and multiply by reverse index, to give precedence to the order of numbers
for(my $i = 0; $i < @arr; $i++) {
$arr[$i] *= (@arr - $i);
}
}
print "arr: " . join(',' , @arr) . "\n";
for (my $j = 0; $j < $d; $j++) {
my $max = $arr[0];
my $m_index = -1;
#replace nth maximum with -1
for (my $i = 0; $i < @arr; $i++) {
if($max <= $arr[$i]) {
$max = $arr[$i];
$m_index = $i;
}
}
$arr[$m_index] = -1;
}
#return all numbers with value other than -1
my $result = "";
for (my $i = 0; $i < @arr; $i++) {
if($arr[$i] != -1){
$result = $result . "" . $arr[$i]/(@arr - $i);
}
}
print "Result: $result\n";
它可以在所有的情況下,除,情況類似:
Number = 765028321
Delete = 5
的問題是拆除7650 2
8321當它應該刪除765028 3
21.
因爲2 * 5> 3 * 3。
這是偶然的編程/個謎? – Borodin
它不應該刪除8,以便結果數量比刪除3時更小? –
@Borodin,這是一個謎題。 @Tejash,其實結果應該是:'0221',但我的程序輸出'0321'。 – Meticulous