| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
哪位好心人帮忙看一下?我实在是不知道哪里有错了!提交老是Wr...都快疯了!只学了一个Pascal也这样难为我...program Q1011;
type
s=array[1..100]of longint;
var
a:s;
i,n,total,try:longint;
procedure paiXu(var a:s;n:longint);
var
i,j,k,temp:longint;
begin
for i:=1 to n-1 do
begin
k:=i;for j:=i+1 to n do if a[k]<a[j] then k:=j;
if k<>i then begin temp:=a[i];a[i]:=a[k];a[k]:=temp end
end
end;
function findOne(var a:s;n,length:longint):boolean;
var
i,temp:longint;
begin
if length=0 then begin findOne:=true;exit end; {拼接完成,返回}
for i:=1 to n do
if (a[i]<>0)and(a[i]<=length) then
begin
temp:=a[i];a[i]:=0;
if findOne(a,n,length-a[i]) then {拼接完成,继续返回}
begin findOne:=true;exit end;
a[i]:=temp {拼接失败,数据还原}
end;
findOne:=false {拼接失败,返回}
end;
function check(a:s;n,length,count:longint):boolean;
var {a为传值,不影响下一次check}
i:longint;
begin
for i:=1 to count do
if not findOne(a,n,length)
then begin check:=false;exit end;
check:=true
end;
begin
readln(n);
repeat
total:=0;
for i:=1 to n do
begin
read(a[i]);total:=total+a[i]
end;
readln;
paiXu(a,n); {由贪心原理,从大到小排序,拼接时先拼长的}
try:=a[1];
repeat
while total mod try<>0 do
try:=try+1;
if check(a,n,try,total mod try) then break;
try:=try+1
until false;
writeln(try);
readln(n)
until n=0
end.
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator