回 帖 发 新 帖 刷新版面

主题:求助,砝码问题

有5个砝码,分别为1kg,2kg,3kg,4kg,5kg,每种砝码只有一个。问:用这些砝码最多可以称出多少种重量?每种重量又有多少种称法?
输入:无
输出:
第一行输出可称出多少种重量(n)
第二行输出第一种重量可以用几种方法来称(a[1])
第三行输出第二种重量可以用几种方法来称(a[2])
……
第N行输出第N种重量可以用几种方法来称(a[n])
求最简单易懂、时间量和空间量的复杂度小的程序!!!!!!(最好可以尽可能优化)

回复列表 (共2个回复)

沙发

每个砝码3种情况(左、右、不放)穷举,然后统计即可。

板凳

program ex;
var i,j,s1,s2,s:longint;
    a,b:array[0..100] of longint;
begin
  for i:=0 to 5 do b[i]:=0;
  for i:=0 to 15 do a[i]:=0;
  while b[0]=0 do
    begin
      b[5]:=b[5]+1;
      j:=5;
      while b[j]=3 do
        begin
          b[j]:=0;
          j:=j-1;
          b[j]:=b[j]+1;
        end;
      s1:=0;s2:=0;
      for i:=1 to 5 do
        if b[i]=1 then s1:=s1+i
        else if b[i]=2 then s2:=s2+i;
      s1:=abs(s1-s2);
      a[s1]:=a[s1]+1;
 end;
  s:=0;
  for i:=1 to 15 do if a[i]<>0 then s:=s+1;
  writeln(s);
  for i:=1 to 15 do writeln(a[i] div 2);
end.

我来回复

您尚未登录,请登录后再回复。点此登录或注册