imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 03.05.2004, 15:37     # 41
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
joker99
Убрать его физически тебе придётся для освобождения места. Для этого тебе и надо 2 указателя. Ты относишся к массиву как кругу, по которому бегают 2 указателя. Т.е. такая ситуация:
Код:
--4768
   H T
абсолютна законна. Следующая попытка положить в очередь элемент поставит Tail
на нулевой индекс (под первой -). Туда и попадёт новый объект.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.

Последний раз редактировалось Programmer; 03.05.2004 в 16:00.
Dimm вне форума  
Старый 03.05.2004, 19:55     # 42
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
Да, ситуация совершенно законна, но в моём способе это бы выглядело так
Код:
234768
  H  T
Следующая попытка положить в очередь элемент поставит Tail
на нулевой индекс (под 2). Туда и попадёт новый объект.
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 03.05.2004, 20:58     # 43
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
joker99
Во-во и если ты пишешь на С++, то у тебя memory leak.
Иначе тебе придётся удалить объект, как я и сказал:
Код:
delete array[head];
array[head] = null;
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 03.05.2004, 21:02     # 44
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
2 All

Для тех кто решил задачу с петлёй у связного списка.
Усложняю задачу.
Теперь, после того как один указатель догнал другой, найдите начало петли.
Напоминаю, что указатель на Head очереди у вас сохранён.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 03.05.2004, 23:13     # 45
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
2 All
Так еще одна задачка "на засыпку"

Дано бинарное дерево. Ну, например:
Код:
                 5
                /  \
               1    4
              / \     \
             3  7     6
Требуется: распечатать его по уровням
Код:
 
5
1 4
3 7 6
Хе-хе, всего-то
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 04.05.2004, 10:42     # 46
a_ber
Newbie
 
Регистрация: 25.11.2003
Адрес: Near monitor
Сообщения: 49

a_ber Путь к славе только начался
Цитата:
Сообщение от Programmer
2 All

Для тех кто решил задачу с петлёй у связного списка.
Усложняю задачу.
Теперь, после того как один указатель догнал другой, найдите начало петли.
Напоминаю, что указатель на Head очереди у вас сохранён.
Я же написал в начальном посте, что это требуется сделать (причем за линейное время) и естественно О(1) памяти ...

Последний раз редактировалось a_ber; 04.05.2004 в 10:47.
a_ber вне форума  
Старый 04.05.2004, 13:29     # 47
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
a_ber
Цитата:
есть ли в нем петля и если есть то где
Да, извини не заметил .
Ладно, раз ты уже спрашивал, даю решение.
1) Ставим один из указателей в начало (head), а второй оставляем указывать на последнюю точку встречи.
2) Пускаем их бежать с одинаковой скоростью.
3) Точка их встречи и будет началом петли.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 04.05.2004, 23:30     # 48
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
Цитата:
Сообщение от Programmer
joker99
Во-во и если ты пишешь на С++, то у тебя memory leak.
Иначе тебе придётся удалить объект, как я и сказал:
Код:
delete array[head];
array[head] = null;
В твоём оригинальном ответе небыло delete array[head], а было только array[head] = null,значит подразумевался язык с GC, да и вообще было сказано решение не привязанное к языку, а не решение на c++.
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 05.05.2004, 08:20     # 49
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
joker99
Ну да, конечно. А теперь представь такую ситуацию.
Мы в языке с GC.
Юзер позвал 10 раз enqueue() и 5 раз dequeue(), получил объекты, поработал с ними и благополучно отпустил. И больше не зовёт очередь. Но эти 5 объектов не будет собраны GC, поскольку ты продолжаешь ссылаться на них.
А теперь представь, что объекты эти занимают каждый много места.
Вота так они и будут болтаться у тебя в памяти как "га*но в проруби".
И всё из-за строки которую ты упрямо отказываешся вставить в свой код споришь уже несколько постов:
array[head] = null;
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 05.05.2004, 21:30     # 50
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
Согласимся на том что мой вариант был для очереди int, а твой ( после добавления delete array[head]) для объектов
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 08.05.2004, 07:21     # 51
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
Вот вам простенькая задачка: дана матрица N*M, заполненная случайным образом 0 и 1. 0-чёрный, а 1-белый цвета. Посчитать число белых "паятен" на чёрном "фоне". Стоящие рядом по вертикали или горизонтали 1 считать за одно пятно (на искосок не считается). Пример:
011100
101101
110001
Здесь 3 "пятна"
V@nya вне форума  
Старый 08.05.2004, 10:31     # 52
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Цитата:
V@nya:
Вот вам простенькая задачка
Действительно, простенькая.

Код:
int iSpots = 0, iCounter = 0;
for (int i = 0; i < M; i++, iCounter = 0)
{
   for(int j = 0; j < N; j++)
   {
      if ( matrix[i][j] == 1 )
        iCounter++;
      else 
      {
         if ( iCounter >= 2 )
           iSpots++;
         iCounter = 0;
      }  
   }
}

iSpots - содержит число пятен.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.

Последний раз редактировалось Programmer; 08.05.2004 в 11:05.
Dimm вне форума  
Старый 08.05.2004, 17:22     # 53
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
Programmer, не верно, ты наверно не правильно понял условие, вот ещё пример:
00100
10001
10101
11110
10101
здесь 4 пятна
V@nya вне форума  
Старый 08.05.2004, 19:13     # 54
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
V@nya

Больше 2-х единиц как по вертикали так и по горизонтали?

Или одна единица?
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.
Dimm вне форума  
Старый 09.05.2004, 01:10     # 55
joker99
Full Member
 
Аватар для joker99
 
Регистрация: 19.07.2003
Адрес: Israel
Сообщения: 924

joker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форумеjoker99 Популярный человек на этом форуме
Может так:
Код:
int iSpots = 0
for (int i = 0; i < M; i++)
{
   for(int j = 0; j < N; j++)
   {
      if ( matrix[i][j] == 1 )
      {
           FillSpot(matrix,i,j)
           iSpots++;
      }
}

void FillSpot(int* matrix,int i,int j)
{
   if (i>= M  || j>= N || matix[j*M+i]  == 0)
       return;
  matix[i][j] = 2;
  FillSpot(matrix,i+1,j);
  FillSpot(matrix,i-1,j);
  FillSpot(matrix,i,j-1);
  FillSpot(matrix,i,j+1);
}
__________________
Столько дел, что и работой занятся некогда...
joker99 вне форума  
Старый 09.05.2004, 10:36     # 56
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
joker99, почти правильно,но если i=0, то FillSpot(matrix,i-1,j); вылетит с ошибкой т.к. будет присваивать m[-1,j] двойку.
Я функцию FillSpot (kill) делал так:
void kill(int i, int j)
{
m[i][j]=0;
if (i>1)
if (m[i-1][j]==1) kill(i-1,j);
if (i<N)
if (m[i+1][j]==1) kill(i+1,j);
if (j>1)
if (m[i][j-1]==1) kill(i,j-1);
if (j<M)
if (m[i][j+1]==1) kill(i,j+1);
}
Массив был глобальной переменной
V@nya вне форума  
Старый 09.05.2004, 10:39     # 57
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
Programmer, едениц может быть сколько угодно.
V@nya вне форума  
Старый 10.05.2004, 23:24     # 58
Dimm
Добрый фей-мод
 
Аватар для Dimm
 
Регистрация: 18.09.2002
Адрес: Израиль
Пол: Male
Сообщения: 4 155

Dimm СуперБогDimm СуперБог
Dimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБогDimm СуперБог
Вот вам еще легонькая задачка.
дано:
1 1 1 = 6
2 2 2 = 6
3 3 3 = 6
4 4 4 = 6
5 5 5 = 6
6 6 6 = 6
7 7 7 = 6
8 8 8 = 6
9 9 9 = 6

Требуется: используя ЛЮБЫЕ арифмитические знаки, сделайте выражение верным. Например: 2 + 2 + 2 = 6.
Какие угодно знаки и где угодно. Главное, что-бы выражение было правильным.

взято с аудиогейта Там же и решение. Так что не смотрите заранее.
__________________
Фотолюбительщина

Пока слова не сказаны - ничего нет. Но если они сказаны, даже то чего нет становится реальностью.

Последний раз редактировалось Programmer; 10.05.2004 в 23:34.
Dimm вне форума  
Старый 11.05.2004, 16:01     # 59
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
3*3-3=6
V@nya вне форума  
Старый 11.05.2004, 16:03     # 60
V@nya
Full Member
 
Аватар для V@nya
 
Регистрация: 20.07.2002
Адрес: Находка
Сообщения: 740

V@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царствеV@nya Луч света в тёмном царстве
6*6/6=6
6+6-6=6
V@nya вне форума  


Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 15:45.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.