回 帖 发 新 帖 刷新版面

主题:Tju1017

各位大虾,下面这个程序为什么过不了?有价值的加30分!
program tju1017;
var a            : array[0..20]of longint;
    n, a1, a2, i : integer;
procedure sort;
var flag : boolean;
    j    : integer;
begin
  flag:=true;
  for i:=1 to n-1 do
  begin
    for j:=1 to n-i do
      if a[j]<a[j+1] then
      begin
        a[0]:=a[j+1]; a[j+1]:=a[j]; a[j]:=a[0];
        flag:=false;
      end;
    if flag then exit;
  end;
end;
begin
  repeat
    readln(n);
    for i:=1 to n do readln(a[i]);
    if n=1 then writeln(a[1]);
    if n=2 then writeln(abs(a[1]-a[2]));
    if (n<>1)and(n<>2) then
    begin
      sort; a1:=a[1]; a2:=a[2];
      for i:=3 to n do
        if a1>a2 then a2:=a[i]+a2 else a1:=a[i]+a1;
      writeln(abs(a1-a2));
    end;
  until seekeof;
end.

回复列表 (共3个回复)

沙发

麻烦楼主给个题目来看看!

板凳

if a1>a2 then a2:=a[i]+a2 else a1:=a[i]+a1;

这段算法不对,得到的解不是最优解

设想一下:
1,2,3,1000
你的算法得到的解是abs(1+3-2-1000) = 998
但是真正的解是abs(1000-1-2-3) = 994

3 楼

Problem
你有一堆石头质量分别为W1,W2,W3...WN.(W<=100000)现在需要你将石头合并为两堆,使两堆质量的差为最小。

Input
该程序有多组测试数据,每组测试数据第一行为整数N(1<=N<=20),表示有N堆石子。接下去N行,为每堆石子的质量。

Output
每组测试数据只需输出合并后两堆的质量差的最小值。

Sample Input
5
5
8
13
27
14
2
4
4

Sample Output
3
0

我来回复

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