Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.04.2009, 17:41
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Помогите написать программу, жизненно необходимо:

В масcиве А размера N за один просмотр необходимо каждый элемент заменить на ближайший следующий за ним элемент, который больше его. Если такого элемента нет, то заменить его на ноль. Можно использовать дополнительную память.
Пример: для А=1 3 2 5 3 4 результат будет следующий А=3 5 5 0 4 0.
  #2  
Старый 25.04.2009, 20:53
гость

 
Сообщений: n/a

так возьми элемент пробегись дальше по массиву и посмотри, или так нельзя? Если нет то подумай что-нибудь со стеком или вектором.
  #3  
Старый 25.04.2009, 20:59
Новичок

Отправить личное сообщение для e-maxx Посмотреть профиль Найти все сообщения от e-maxx
 
Регистрация: 14.03.2009
Сообщений: 24

Ну чтобы за один проход, стеком надо. На вершине которого как раз ответ будет находиться.
  #4  
Старый 25.04.2009, 22:32
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Хотелось бы увидеть, как это будет в рекурсии реализовываться. А то не очень понятно как в рекурсии стеком управлять. И решается эта задача рекурсией?
  #5  
Старый 26.04.2009, 00:41
Новичок

Отправить личное сообщение для e-maxx Посмотреть профиль Найти все сообщения от e-maxx
 
Регистрация: 14.03.2009
Сообщений: 24

Ну рекурсию можно присобачить, хотя она здесь собственно не нужна: делаем функцию get (int pos), которая вычисляет ответ для позиции pos и вызывает себя от позиции pos-1.
  #6  
Старый 26.04.2009, 12:54
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Спасибо за идею, но , если не трудно текст программы можешь написать, а то вдруг не получится у меня самого?
  #7  
Старый 26.04.2009, 13:01
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Даже не надо всю,. именно часть с рекурсивной подпрограммой. Одна из моих проблем - трудно представить програмно.
  #8  
Старый 26.04.2009, 13:12
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Да, и извиняюсь - язык Турбо Паскаль.
  #9  
Старый 27.04.2009, 11:28
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

не вижу смысла рекурсию за уши притягивать
Код:
var
  Stack: array[0..15] of Byte;
  StackPtr: Integer;
  A: array [0..15] of Integer;
  i: Integer;
begin
  Randomize;
  for i := 0 to 15 do begin
    A[i] := Random(10);
    Write(A[i]: 3);
  end;
  Writeln;
  StackPtr := -1;
  for i := 0 to 15 do begin
    while (StackPtr >= 0) and (A[Stack[StackPtr]] < A[i]) do begin
      A[Stack[StackPtr]] := A[i];
      Dec(StackPtr);
    end;
    Inc(StackPtr);
    Stack[StackPtr] := i;
  end;
  while StackPtr >= 0 do begin
    A[Stack[StackPtr]] := 0;
    Dec(StackPtr);
  end;
  for i := 0 to 15 do
   Write(A[i]:3);
  #10  
Старый 28.04.2009, 20:17
гость

 
Сообщений: n/a

Рекурсия. Олимпиадная задача 7.
Реальное спасибо тем, кто протянул руку помощи и особенно МВо. Я кстати вообще не очень рекурсию люблю, но как сказали так и приходится делать.
Дополнительные примеры принимаются.
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия. Олимпиадная задача 7. гость Задачи 0 25.04.2009 17:37
Олимпиадная задача, рекурентные гость Математические алгоритмы (другое) 5 29.01.2009 17:12
Олимпиадная задача на паскале nastya_ab Реализация, исходники, языки 13 26.01.2009 21:00
Рекурсия. гость Задачи 1 14.12.2008 18:39
Помогите с Задачкой (Рекурсия) nfirdavs Задачи 3 03.09.2007 22:15