Bài 2. Trò chơi với băng số (8 điểm) File bài làm DIV.PAS
Cho một băng số gồm n số nguyên dương, mỗi số được viết trên một ô. Hãy cắt băng số này thành nhiều đoạn nhất sao cho tổng các phần tử trong các đoạn là bằng nhau.
Dữ liệu vào: DIV.INP + Dòng đầu ghi n (n ≤ 1000)
+ Dòng tiếp theo ghi n số nguyên dương a[SUB]1[/SUB], a[SUB]2[/SUB], ..., a[SUB]n[/SUB]
(các số nằm trên một dòng cách nhau bởi một dấu cách a[SUB]i[/SUB] ≤ 1000)
Dữ liệu ra: DIV.OUT Ghi K là số đoạn cần chia.
Ví dụ:
Cho một băng số gồm n số nguyên dương, mỗi số được viết trên một ô. Hãy cắt băng số này thành nhiều đoạn nhất sao cho tổng các phần tử trong các đoạn là bằng nhau.
Dữ liệu vào: DIV.INP + Dòng đầu ghi n (n ≤ 1000)
+ Dòng tiếp theo ghi n số nguyên dương a[SUB]1[/SUB], a[SUB]2[/SUB], ..., a[SUB]n[/SUB]
(các số nằm trên một dòng cách nhau bởi một dấu cách a[SUB]i[/SUB] ≤ 1000)
Dữ liệu ra: DIV.OUT Ghi K là số đoạn cần chia.
|
|
DIV.INP | DIV.OUT | Giải thích |
8 10 2 6 2 5 2 1 2 | 3 | Đoạn 1: 10 Đoạn 2: 2 + 6 + 2 =10 Đoạn 3: 5 + 2 + 1 + 2 = 10 |
HTML:
tfi='DIV.INP';
tfo='DIV.OUT';
var n: longint;
a, s: array[0..1001] of longint;
res: longint;
function ok(t: longint): boolean;
var i,u,tong: longint;
begin
tong:=0;
for i:=1 to n do if a[i]<>0 then
begin
tong:=tong+a[i];
if tong=t then tong:=0;
end;
exit(tong=0);
end;
procedure main;
var j,u,i,k,t: longint;
begin
assign(input,tfi); reset(input);
assign(output,tfo); rewrite(output);
read(n);
for i:=1 to n do read(a[i]);
s[0]:=0;
for i:=1 to n do s[i]:=s[i-1]+a[i];
for k:=n downto 1 do if s[n] mod k=0 then
begin
t:=s[n] div k;
if ok(t) then
begin
res:=k;
break;
end;
end;
writeln(res);
close(input); close(output);
end;
BEGIN
main;
END.