回 帖 发 新 帖 刷新版面

主题:请教一个问题


用数组读入一串长整型的数和它们的个数N,如果能把它们分成4组,且每组数的和都相等,则输出‘yes’,反之则输出‘no’。

哪位高手能帮我编一个过程?多谢

回复列表 (共4个回复)

沙发

搜索把
先求和再深搜

板凳

能不能写出代码,深搜我不太会

3 楼

program nnnnnnnnn;
var n,total:longint;
    a:array [1..1000] of longint;
    ok:boolean;
    used,b:array [1..1000] of boolean;
procedure digit(x:longint);
var i:integer;
begin
  if x=0 then
  begin
    ok:=true;
    for i:=1 to n do
      if used[i] then b[i]:=true;
    exit;
  end;
  for i:=1 to n do
    if not(used[i]) and (x>=a[i]) then
    begin
      used[i]:=true;
      digit(x-a[i]);
      used[i]:=false;
    end;
end;
procedure init;
var i:integer;
begin
  readln(n);
  fillchar(a,sizeof(a),0);
  total:=0;
  for i:=1 to n do
  begin
    read(a[i]);
    total:=total+a[i];
  end;
  if (total mod 4<>0) then writeln('no')
                      else
  begin
    fillchar(b,sizeof(b),false);
    for i:=1 to 3 do
    begin
      ok:=false;
      used:=b;
      digit(total div 4);
      if not(ok) then
      begin
        writeln('no');
        halt;
      end;
    end;
  end;
begin
  init;
end.

4 楼

明白了,多谢

我来回复

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