砝码称重 - Read
砝称码码重
码有1g~2g~3g~5g~10g~20g的码各若干枚;其码重砝?1000g,~要求, 码入,
a1 a2 a3 a4 a5 a6(表示1g码有砝a1~个2g码有砝a2~个......20g码有砝a6个) 码出,
Total=N (N表示用码些码能出的不同重量的~但不包括一码也不用的情砝称个数个砝况) 码入码例,1 1 0 0 0 0
码出码例,Total=3~表示可以出称1g~2g~3g三码不同的重量
码解
码
const num,array[1..6] of shortint=(1~2~3~5~10~20)~ ,码的重量序列, 砝
var
a,array[1..6] of integer~ ,,码码的, 砝个数
visited,array[0..1000] of boolean~ ,重量的码码码志序列~防止重码码码,
no,array[0..1000] of integer~ ,n0[0]—不同重量~数n0[j]—第j码重量;,?j?no[0],,
total~i~j~k,integer~ {total—目前出的重量称}
我码按照第,码码~第,码码~……第,码码的码序分析。在分析第砝砝砝i码码的放置方案码~砝
依次在码有的不同重量的基码上~放,码、,码、……a[i]码~码生新的不同重量。 n0[n0[0]+1]=total?total=n0[j]+k*num[i]~visited[total]=false~,?i?6~,
?j?no[0]~ ,?k?a[i]
码段i, 分析第i码码砝(,?i?6)~
状码j,枚码码有的不同重量;,?j?no[0],~
决策k,在码有重量的基码上放k码第i码码~码生重量砝n0[j]+k*num[i](,?k?a[i])~
码算码程如下,
fillchar(visited~sizeof(visited)~false)~
write(’a1-a6,’)~for i?1 to 6 do read(a[i]),码入,码码的, 砝个数
no[0] ?1~no[1] ?0~ ,码生第,码重量,,
for i?1 to 6 do ,码段,分析第i码码, 砝
for j?1 to no[0] do ,码,枚码码有的不同重量, 状
for k?1 to a[i] do ,策,在码有重量的基码上放决k码第i码码,砝
begin
total?no[j]+k*num[i]~ ,码生重量,
if not visited[total] then ,若码重量未码生码~码码码码码志,
begin
visited[total] ?true~
inc(no[0])~ ,新重量码入n0序列,
no[no[0]] ?total~
end~,then,
end~{for}
writeln(no[0]-1)~ {码出不同重量的个数}