love_wisdom
发表于 2014-06-18 20:05
这样可以不,你等我,我出一个pascal版的,你要不?
NO_Getway
发表于 2014-06-18 23:47
回复 21# love_wisdom
可以啊,猜想能可能能看懂pascal逻辑。
rubyish
发表于 2014-06-19 07:44
本帖最后由 rubyish 于 2014-06-19 04:37 编辑
:D)~ lai ge perl
perl abc.pl > result
cat result#!/usr/bin/perl
# abc.pl
my @A = ( 8, 1, 4, 2, 7, 3, 5, 6 );
my $B = 30;
my @C = sort { $b <=> $a } @A;
my @index = sort { $A[$b] <=> $A[$a] } 0 .. $#A;
@index = sort { $index[$a] <=> $index[$b] } 0 .. $#index;
sub gimme {
my ( $num, $head, @tail ) = @_;
return $num % $head ? () : [ $num / $head ] unless @tail;
map {
my $h = $_;
map { [ $h, @$_ ] } gimme( $num - $h * $head, @tail )
} 0 .. $num / $head;
}
my @result = map [ @$_[@index] ], gimme $B, @C;
for my $r (@result) {
print join ' + ', map { "$r->[$_]*$A[$_]" } 0 .. $#$r;
print " = $B$/";
}
print 'total = ', ~~ @result, $/;
__DATA__
Linux_manne
发表于 2014-06-19 10:14
都很nice 学习中。。
NO_Getway
发表于 2014-06-19 13:22
回复 8# Hadron74
这哥们 忘了给你说谢谢了,不错,就是a和b很长或者很大的时候运行很慢了
NO_Getway
发表于 2014-06-19 13:24
回复 23# rubyish
perl符号太多了,查查语法再看看,谢谢
rubyish
发表于 2014-06-20 01:32
回复 26# NO_Getway
biru:
a = ( 4, 3, 8, 2, 6 )
b = 13
sort a: da <--> xiao8 6 4 3 2 13
------------------
0 0 0 0 6.5 X
0 0 0 1 5
0 0 0 2 3.5 X
0 0 0 3 2
0 0 0 4 0.5 X
0 0 1 0 4.5 X
0 0 1 1 3
0 0 1 2 1.5 X
0 0 1 3 0
0 0 2 0 2.5 X
0 0 2 1 1
0 0 3 0 0.5 X
0 1 0 0 3.5 X
0 1 0 1 2
0 1 0 2 0.5 X
0 1 1 0 1.5 X
0 1 1 1 0
0 2 0 0 0.5 X
1 0 0 0 2.5 X
1 0 0 1 1
1 0 1 0 0.5 X
------------------
total = 21
NG :13, OK : 8