Консультация № 137145
16.05.2008, 21:37
0.00 руб.
0 1 1
Уважаемые эксперты!
Помогите решить следующую задачу:
В каждой строчке текстового файла записано по одному слову. Найти N слов, содержащих наибольшее количество различных символов.

Обсуждение

давно
Профессор
401888
1232
17.05.2008, 13:37
общий
это ответ
Здравствуйте, Papan!
В данной задаче нужно сортировать слова по количеству символов. Поскольку эти два свойства разных типов, то удобнее всего объеденить их в запись, где у каждого элемнта два свойства: символы строки и их количество.
Решение с комментариями в приложении.

Приложение:
uses crt;type Tstr=record {тип запись с полями символы и количество} str:string; kol:byte; end;var f:text; s:array[1..100]of Tstr; {массив записей} bf:Tstr; {буфер при сортировке записей} mn:set of char; {вспомогательное множество для нахождения неповторяющихся символов} n,k,i,j,r:integer;beginclrscr;assign(f,‘text_1.txt‘);{заранее созданный файл строк(слов)}reset(f); {открываем для чтения}k:=0;while not eof(f) do begin k:=k+1; {считаем количество строк} readln(f,s[k].str); {записываем их в поле строки записи} end;for i:=1 to k do begin mn:=[];r:=0; {создаем пустое множество и обнуляем счетчик} for j:=1 to length(s[i].str) do {проходим по каждой строке} if not (s[i].str[j] in mn) then {если символа нет во множестве} begin r:=r+1; {считаем его} include(mn,s[i].str[j]);{и вставляем во множество} end; s[i].kol:=r; {результат записываем в поле количество} end;{сортируем запись по убыванию числа неповторяющихся символов }for i:=1 to k-1 dofor j:=1 to k-1 doif s[j].kol<s[j+1].kol then begin bf:=s[j]; s[j]:=s[j+1]; s[j+1]:=bf; end;write(‘Vvedite chislo N<k:‘); {вводим заданное число}readln(n);for i:=1 to n do {выводим первые N строк(слов)}writeln(s[i].str);readlnend.
Форма ответа