|
Вопрос # 3 665/ вопрос открыт / |
|
Здравствуйте!
Помогите пожалуйста составить алгоритм заполнения StringGrid с пятью столбцами всевозможными комбинациями чисел, которые в сумме будут равны 10.
Допустим
10-0-0-0-0
0-10-0-0-0
...............
0-0-0-0-10
9-1-0-0-0
9-0-1-0-0
и т.д.
Пожалуйста, очень нужно!
 |
Вопрос задал: webkent (статус: 2-ой класс)
Вопрос отправлен: 18 января 2010, 19:39
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Валя
Здравствуйте, webkent! Возможно этот код вам поможет.
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k: integer; f: boolean;
begin
stringgrid1.colcount:=5;
stringgrid1.rowcount:=1;
f:=false;
i:=0;
a[i]:=0;
repeat
if a[i]=10 then
if i<4 then begin
a[i]:=0;
inc(i);
end
else begin
f:=true;
end
else begin
inc(a[i]);
i:=0;
if not f then
if (a[0]+a[1]+a[2]+a[3]+a[4])=10 then begin
stringgrid1.rowcount:=stringgrid1.rowcount+1;
for j:=0 to 4 do
stringgrid1.Cells[j,stringgrid1.RowCount-2]:=inttostr(a[j]);
end;
end;
until f;
end;
 |
Ответ отправил: Валя (статус: 1-ый класс)
Время отправки: 18 января 2010, 22:03
Оценка за ответ: 4
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, webkent!
А как вот такой код
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k: integer;
a1, a2, a3, a4, a5, t:byte;
begin
for a1 := 0 to 10 do
for a2 := 0 to 10 do
for a3 := 0 to 10 do
for a4 := 0 to 10 do
begin
t := a1+a2+a3+a4;
if (t > 10) then //плохо, уже больше
continue;
a5 := 10 - t;
with stringgrid1 do begin
RowCount:=RowCount+1;
cells[0,rowcount-2]:=inttostr(a1);
cells[1,rowcount-2]:=inttostr(a2);
cells[2,rowcount-2]:=inttostr(a3);
cells[3,rowcount-2]:=inttostr(a4);
cells[4,rowcount-2]:=inttostr(a5);
end;
end;
end;
код можно ещё ускорить, если вставить дополнительные проверки, например после второго for что то вида
begin
if (a1 + a2 > 10) continue;
А ещё эту задачу можно решать с помощью рекурсии:)
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 19 января 2010, 11:39
Оценка за ответ: 5
Комментарий к оценке: Спасибо что помогаете, сам сидел ломал голову!
|
Мини-форум вопроса
Всего сообщений: 8; последнее сообщение — 19 января 2010, 12:21; участников в обсуждении: 3.
|
Жикльор (статус: 5-ый класс), 18 января 2010, 20:30 [#1]:
А почему СтринжГрид? Если такое количество комбинаций заносить в СтринжГрид, то это небыстроспособно для компьютера.
Если бы строители строили дома так, как программисты пишут программы, то первый же дятел уничтожил бы цивилизацию.
|
|
webkent (статус: 2-ой класс), 18 января 2010, 20:38 [#2]:
да вообще не суть, мне нужно сгенерировать такую таблицу, а о выводе уже буду думать позже. Никак не могу придумать алгоритм почему-то. А если есть более быстрая альтернатива стринггриду, то предлагайте. Но вообще это не так важно, как сами комбинации...
|
|
webkent (статус: 2-ой класс), 18 января 2010, 23:04 [#3]:
Валя не работает ваш код почему-то у меня
|
|
Валя (статус: 1-ый класс), 19 января 2010, 00:02 [#4]:
webkent: действительно, забыл добавить переменную
a: array [0..4] of byte;
с ней должно работать
|
|
webkent (статус: 2-ой класс), 19 января 2010, 00:13 [#5]:
я добавил всёравно что-то не пашет. Если у тебя работает плиз скинь проект
|
|
Валя (статус: 1-ый класс), 19 января 2010, 08:39 [#6]:
очень странно. ругается на что нибудь?
интересный случай... попробуем зайти с другой стороны
а вот этот код будет работать?
procedure TForm1.FormCreate(Sender: TObject);
var i,j,k: integer;
a: array [0..4] of byte;
begin
for i:=0 to 161051 do begin
k:=1;
for j:=0 to 4 do begin
a[j]:=(i div k) mod 11;
k:=k*11;
end;
if (a[0]+a[1]+a[2]+a[3]+a[4])=10 then
with stringgrid1 do begin
RowCount:=rowcount+1;
for j:=0 to 4 do
cells[j,rowcount-2]:=inttostr(a[j]);
end;
end;
end;
|
|
webkent (статус: 2-ой класс), 19 января 2010, 10:32 [#7]:
А так не правильно генерирует. Комбинации которые не подходят
|
|
webkent (статус: 2-ой класс), 19 января 2010, 12:21 [#8]:
Ошибся, всё работает, спасибо огромное, Вадим!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|