Привет, ЛОР. Такую вот задачку дал знакомый: есть цифры 1, 3, 4, 6. Можно использовать операторы +, -, *, /, унарный минус, скобки. «Склеивать» (13+46) цифры нельзя. Надо получить 24, используя все цифры по одному разу. Всё происходит в 10-чной системе счисления. После неудачи при попытке решить в уме написал программу. К сожалению, я не программист, поэтому написал «как умею»:
my @nums = (1, 3, 4, 6, -1, -3, -4, -6);
#numbers
foreach my $n1 (@nums){
foreach my $n2 (@nums){
next if abs($n2) == abs($n1);
foreach my $n3 (@nums){
next if abs($n3) == abs($n2) || abs($n3) == abs($n1);
foreach my $n4 (@nums){
next if abs($n4) == abs($n1) || abs($n4) == abs($n2) || abs($n4) == abs($n3);
#operators
foreach my $o1 (' + ', ' - ', ' * ', ' / '){
foreach my $o2 (' + ', ' - ', ' * ', ' / '){
foreach my $o3 (' + ', ' - ', ' * ', ' / '){
#brackets
foreach my $i (0..63){
my %br = ();
foreach my $j (0..5){
($br{$j.'o'}, $br{$j.'c'}) = ($i & 1 << $j) ? ('(', ')') : ('', '');
}
my $str = $br{'0o'}.$br{'1o'}.$br{'2o'}.$n1.$o1.$br{'3o'}.$br{'4o'}.$n2.$br{'0c'}.$o2.$br{'5o'}. $n3.$br{'4c'}.$br{'1c'}.$o3.$n4.$br{'2c'}.$br{'3c'}.$br{'5c'};
print "\n$str => ".eval($str);
}
}
}
}
}
}
}
}