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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2010, 17:52   #1
Shift_sk
Форумчанин
 
Регистрация: 20.11.2010
Сообщений: 221
По умолчанию Строка

Парни помогите!
На районной олимпиаде по информатике дали следующую задачу.
Смыс таков
дано слово
karandash
число
кпримеру
5
и пять члов
dasha drakkar sara kar drama
и сказано подсчитать количество возможных слов которые были составлены из слова karandash правильно(любую букву из слова karandash можно использовать один раз!)

ответ для этого примера равен 3!
помогите кому не лень! уже 3 день сижу над задачей а решение так найти и немогу!
www.bezperepl.at.ua
Код:
...
Shift_sk вне форума Ответить с цитированием
Старый 22.11.2010, 18:50   #2
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Думаю, что основа решения такая:
Заносим исходное слово (из начальной переменной, например) в переменную BaseWord;
Заносим слово (одно из тех 5-ти) в переменную MyWord;
Теперь берем символ 1 из MyWord и посимвольно перебираем BaseWord.
Если встретили MyWord[1] в BaseWord - значит удаляем этот символ из BaseWord. Далее берем символ 2 из MyWord и опять посимвольно перебираем BaseWord (уже один символ удален) - если встретили, то опять удаляем из BaseWord. И так до конца слова.
Если символ MyWord[n] не встречается в BaseWord - значит обрываем перебор. Если же все символы находятся - значит увеличиваем счетчик возможных слов.
Для другого слова - заново присваиваем BaseWord и MyWord значения.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 22.11.2010, 23:01   #3
Shift_sk
Форумчанин
 
Регистрация: 20.11.2010
Сообщений: 221
По умолчанию

ммм.... впринцепе я так и решал!но у меня программа прошла только 1 тест из 10!
вот ета строка - обрываем перебор.
это как?
www.bezperepl.at.ua
Код:
...
Shift_sk вне форума Ответить с цитированием
Старый 22.11.2010, 23:53   #4
Shift_sk
Форумчанин
 
Регистрация: 20.11.2010
Сообщений: 221
По умолчанию

вот код чет неработает!

Код:
var s, m: string; 
    p, k, w, t, i: integer;
begin
  read(s, m);
  delete(m, 1, 1);
  p := 1;
  w := 1;
  k := 0;
  while (m <> '') do begin
    if s[p] = m[w] then begin
      delete(s, p, 1);
      delete(m, w, 1);
      p := 1;
    end
    else if s[p] <> m[w] then begin
      p := p + 1;
    end;

    if (m <> '') and (s = '') then begin
      t := t + 0;
    end;

    if m = '' then begin
      t := t + 1;
    end;

    if (m <> '') and (s <> '') then
      if m[w] <> s[length(s)] then begin
        t := t + 0;
      end;
  end;
end;
write(t);
end.


Тэги форматирования кода [СODE]..[/CODE] не забывайте!
Это кнопка с решёточкой (#)

Модератор.
www.bezperepl.at.ua
Код:
...

Последний раз редактировалось Serge_Bliznykov; 23.11.2010 в 01:39. Причина: форматирование кода #
Shift_sk вне форума Ответить с цитированием
Старый 23.11.2010, 18:13   #5
Shift_sk
Форумчанин
 
Регистрация: 20.11.2010
Сообщений: 221
По умолчанию

кому интересно вот решение!!!

Код:
var a:array[1..255] of integer;s,c:string;
    i,j,p,k,x,n,z:byte;
begin
readln(s);
readln(n);
p:=0;
for i:=1 to length(s) do begin
                                 z:=ord(s[i]);
                                 a[z]:=a[z]+1;
                                end;
for i:=1 to n do begin
                       readln(c);
                       k:=0;
                       for j:=1 to length(c) do begin
                                                         x:=ord(c[j]);
                                                         if a[x]<>0 then begin
                                                                                a[x]:=a[x]-1;
                                                                                k:=k+1;
                                                                              end; 
                                                       end;
                       if  k=length(c) then 
                                            p:=p+1;
                  
                       for j:=1 to 255 do 
                                             a[j]:=0;
                       for j:=1 to length(s) do begin
                                                         z:=ord(s[j]);
                                                         a[z]:=a[z]+1;
                                                       end;
                     end;
 writeln(p);
 end.
www.bezperepl.at.ua
Код:
...
Shift_sk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Строка "Эльнара" Помощь студентам 15 14.07.2010 10:38
Строка powerlifting Общие вопросы C/C++ 13 22.11.2009 23:52
Строка brutos Общие вопросы Delphi 2 19.05.2009 13:01
Строка состаяния или загрузачная строка Sergeu Мультимедиа в Delphi 8 27.08.2008 10:32