Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.04.2009, 16:47   #1
Yulya
 
Регистрация: 31.03.2009
Сообщений: 5
По умолчанию Игра в города (Pascal)

Всем известны правила игры «в города»: первый игрок называет произвольный город, следующий – город, название которого начинается на ту же букву, на которую заканчивается название предыдущего города, и т.д. Аналогичным образом можно играть не в названия городов, а, например, в названия животных. Задан список допустимых для описанной игры слов, слова в нем могут повторяться. Напишите программу, определяющую, в каком порядке в процессе игры должны быть названы слова из списка, чтобы каждое слово было использовано ровно столько раз, сколько оно в нем встречается.
Формат входных данных
В первой строке входного файла записано целое число N – количество слов в списке (1 ≤ N ≤ 1000), а в последующих N строках – сами слова. Каждое из них является последовательностью не более чем из 10 строчных английских букв.
Формат выходных данных
Выведите в выходной файл слова в искомом порядке, либо сообщение «NO», если такого порядка не существует. Каждое слово должно быть выведено в отдельную строку выходного файла.
Yulya вне форума Ответить с цитированием
Старый 13.04.2009, 15:39   #2
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Предлагаю следующий вариант решения:
Цитата:
Program SearLAn;
CONST
Nmax = 10;
Type TArraySting10=array[1..Nmax] of string[10];
VAR
a,b,c : TArraySting10;
YesRezult : boolean;
i,j,k,n,U : word;

Procedure SearchNextWord(a : TArraySting10;i,U : word);
var
s : TArraySting10;
j : word;
begin
if YesRezult then exit;
Inc(U);
if (U = n) then YesRezult := (b[U-1,Length(b[U-1])]= a[i,1]);
b[U] := a[i];
if YesRezult then exit;
for j := 1 to n-U do if j<i then s[j] := a[j] else s[j] := a[j+1];
for j := 1 to n-U do
if s[j,1] = a[i,Length(a[i])] then
begin
SearchNextWord(s,j,U);
end;
end;

BEGIN
YesRezult := false;
n:=6;
a[1] := 'aaas';
a[2] := 'aaad';
a[3] := 'sgkg';
a[4] := 'djkha';
a[5] := 'sds';
a[6] := 'grts';
for i := 1 to n do
if not YesRezult then SearchNextWord(a,i,0);
if YesRezult
then for i := 1 to n do writeln(b[i])
else writeln('No');
END.
Надеюсь элементарное присвоение значений элементам массива и вывод на экран вы смохете заменить на ввод-вывод в файл.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.

Последний раз редактировалось Anatole; 13.04.2009 в 16:50.
Anatole вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карта города zzzzz Общие вопросы Delphi 16 15.06.2011 15:19
Pascal - Игра "Угадай число" d_b Помощь студентам 8 16.02.2009 09:33
Карта города Vadimok Общие вопросы Delphi 4 26.08.2008 17:36