Консультация № 54291
04.09.2006, 17:59
0.00 руб.
0 3 2
Здраствуйте, уважаемые эксперты Делфи!

Недавно начал программировать в Делфи. Программирую все, что попадаеться на глаза (головоломки, ребусы и т.д,), в смысле для тренировки и что-бы интересней было изучать Делфи. Если возможно, пожалуйста подталкните с кодом или идеей как реализовать следующую головоломку: есть поле букв (набор в виде квадрата 11*11) из них надо собрать слова.
Помогите, очень надо, для детей в воскреснной Библейской школы
С уважением,
Володя
г. Ивано-Франковск
Украина

Обсуждение

Неизвестный
04.09.2006, 18:38
общий
это ответ
Здравствуйте, Тимофиев Владимир Михайлович!
Очевидно, только полным перебором. Ну и словарь обязательно надо вбить в программу. Для поиска по нему лучше всего использовать хоть какую-дь индексацию или по двоичному дереву.
давно
Мастер-Эксперт
425
4118
05.09.2006, 06:56
общий
To Тимофиев Владимир Михайлович:А слова будут составлятся в том-же квадрате 11*11?Это типы игры 15, в которой сначала все числа перепутаны, а их надо выставить в порядке возрастания передвижением цифр?Это сначала пустое поле, плюс отдельно определенный набор букв, из которых составляются слова?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
05.09.2006, 16:48
общий
это ответ
Здравствуйте, Тимофиев Владимир Михайлович!

Пример на паскале.

Фактически вся задача реализуется в 2 функциях
1. Проходим всю матрицу 11*11 и считаем количество одинаковых символов.
ScanLetter
2. Проходим по заранее возможным словам и проверяем существуют
ли символы для генерации данного слова.
FindWord

С ув.

Приложение:
var i,j : integer; index : integer; letters : array[0..10,0..10] of char; letter_count : array[0..27] of integer; temp_count : array[0..27] of integer; words : array[0..10] of string; wcount : integer;procedure AddWord(word : string);begin words[wcount] := word; wcount := wcount + 1;end;procedure ScanLetter;begin for i:=0 to 27 do letter_count[i] := 0; for i:=0 to 10 do for j:=0 to 10 do begin index := ord(letters[i,j]) - ord(‘a‘); letter_count[index] := letter_count[index] + 1; end;end;procedure TempAss;var i : integer;begin for i:=0 to 27 do temp_count[i] := letter_count[i];end;procedure FindWord;var st : boolean;begin for i:=0 to 10 do begin TempAss; st := true; j := 1; while (st = true) and (j <= Length(words[i])) do begin index := ord(words[i][j]) - ord(‘a‘); if (temp_count[index] < 1) then st := false; temp_count[index] := temp_count[index] - 1; j := j+1; end; if st = true then writeln(words[i]); end;end;begin wcount := 0; for i:=0 to 11 do begin for j:=0 to 10 do begin letters[i,j] := chr(j + ord(‘a‘)); write(letters[i,j] + ‘ ‘); end; writeln; end; letters[4,3] := ‘z‘; AddWord(‘cat‘); AddWord(‘zez‘); AddWord(‘abc‘); AddWord(‘adas‘); AddWord(‘Hello‘); AddWord(‘cats‘); AddWord(‘za‘); AddWord(‘fifa‘); AddWord(‘asd‘); AddWord(‘Hel‘); ScanLetter; FindWord; readln;end.
Форма ответа