1. Обычная задача на массив.
Код:
var
Places : Array[1..30,1..25] Of Integer;
function FreeInRow(ARow : Integer) : Integer;
var
I : Integer;
begin
Result := 25;
For I := 1 To 25 Do
Result := Result - Places[ARow,I];
end;
function FreeTotal : Integer;
var
I : Integer;
begin
Result := 0;
For I := 1 To 30 Do
Result := Result + FreeInRow(I);
end;
function BusyInRow(ARow : Integer) : Integer;
begin
Result := 25 - FreeInRow(ARow);
end;
function BusyTotal : Integer;
begin
Result := 25 * 30 - FreeTotal;
end;
function UnwantedRow : Integer;
var
I : Integer;
N : Integer;
begin
N := 0;
Result := 0;
For I := 1 To 30 Do
If N > FreeInRow(I) Then
Begin
Result := I;
N := FreeInRow(I);
End;
end;
function MaxFreeLineInRow(ARow : Integer) : Integer;
var
I : Integer;
F : Integer;
begin
Result := 0;
F := 0;
I := 1;
While I <= 25 Do
Begin
Case Places[ARow,I] Of
0 : Inc(F);
1 :
Begin
If Result < F Then Result := F;
F := 0;
End;
End;
Inc(I);
End;
end;
function GetMaxLineRow : Integer;
var
I : Integer;
N : Integer;
begin
Result := 0;
N := 0;
For I := 1 To 30 Do
If N < MaxFreeLineInRow(I) Then
Begin
N := MaxFreeLineInRow(I);
Result := I;
End;
end;
function GetMaxLineNumber : Integer;
var
I : Integer;
N : Integer;
begin
Result := 0;
For I := 1 To 30 Do
If Result < MaxFreeLineInRow(I) Then
Begin
Result := MaxFreeLineInRow(I);
End;
end;
Набора этих функций достаточно что бы решить первую задачу полностью.
Извини, над другими просто лень думать...