Другие языки программирования и технологии

Ребята помогите решить задачу по информатике ПЛАЧУ 50 БАЛОВ ЗА ЛУТШИЙ ОТВЕТ

Заданно 121 натуральное число 1,2,3,...121. Сложить программу которая разложет Эти числа в 11 груп так, чтобы одновременно были выполнены следующие условия !!!Каждая группа имела ровно 11 чисел Каждое число принадлежало лишь 1 группе сумма чисел в каждой группе была одинаковая для всех групп Исходящий файс должен иметь 11 груп по 11 чисел
На Паскале:
{ Дана арифметическая прогрессия 1,2,3,...121 }
{ Сумма всех её членов = 7381 }
{ Значит сумма каждой группы должна быть = 671 }
var
G : array [0..10, 0..10] of Byte;
Nums : array [1..121] of Boolean;
N : Byte;

procedure WriteGroups;
var
Row, Col : Byte;
Sum : Word;
begin
WriteLn('Результат: ');
for Row := 0 to 10 do
begin
Sum := 0;
Write(Row:2, ') ');
for Col := 0 to 10 do
begin
Write(G[Row, Col]:4);
Sum := Sum + G[Row, Col];
end;
WriteLn(' : ', Sum);
end;
Halt;
end;

procedure FindSumG(Row, Col : Byte; Sum : Word; NPred : Byte);
var
N : Byte;
begin
if Row < 11 then
begin
N := NPred + 1;
while (Sum + N <= 671) and (N < 122) do
begin
if Nums[N] then { число ещё свободно }
begin
G[Row, Col] := N; { запомним его в группе }
Nums[N] := False; { займём его }
Sum := Sum + N; { увеличим сумму группы }
if (Sum = 671) and (Col = 10) then { нужная сумма и все элементы группы в наличии }
FindSumG(Row + 1, 0, 0, 0) { составляем следующую группу }
else if Col < 10 then
FindSumG(Row, Col + 1, Sum, N); { добавим в текущую группу }
Nums[N] := True; { освободим число }
Sum := Sum - N; { уменьшим сумму группы }
end;
Inc(N);
end;
end
else
WriteGroups;
end;
begin
for N := 1 to 121 do Nums[N] := True;
FindSumG(0, 0, 0, 0);
end.
Должен задуматься, но результат получишь!
Может и не оптимально, но работает.. .
Результат:
0) 1 2 3 4 5 61 117 118 119 120 121 : 671
1) 6 7 8 9 10 62 111 113 114 115 116 : 671
2) 11 12 13 14 15 60 107 108 109 110 112 : 671
3) 16 17 18 19 20 63 100 103 104 105 106 : 671
4) 21 22 23 24 25 59 97 98 99 101 102 : 671
5) 26 27 28 29 30 64 89 93 94 95 96 : 671
6) 31 32 33 34 35 58 87 88 90 91 92 : 671
7) 36 37 38 39 40 65 78 83 84 85 86 : 671
8) 41 42 43 44 45 57 77 79 80 81 82 : 671
9) 46 47 48 49 50 66 67 73 74 75 76 : 671
10) 51 52 53 54 55 56 68 69 70 71 72 : 671
Сергей Плахов
Сергей Плахов
78 146
Лучший ответ
ну если вы платите балами за работу .. то попробуйте по питаться святым духом!
Не вешай лапшу на уши!
За лучший ответ можно только только 10 балов!

PS.
Лучше бы через вебмани заплатил!
Лучше 50 баксов :)
Язык то какой?