Модераторы     Правила  
  Судовой журнал
  В помощь разработчику | Правила раздела
  Программистские голо...

Боцманы:  CTAKAH, cthulhu

 Страница   из 15    |  Показывать   на странице
Старые сначала  Тема: Программистские головоломки.
K_i_t
Бывший океанец
Сообщений: 9664256

А не слишком ли сложно такую ерунду делать через Бельмановское неравенство? IMHO тут можно гораздо проще.

Нам нужен только буфер для сохранения "необработанных множеств". Назовем его BUFFER.

Начинаем с множества {91,1,1,1,1,1,1,1,1,1} в BUFFER.

1. От первого числа отнимаем 1 и получаем 9 новых множеств путем прибавления этой единицы к числам на позициях 2-10.

2. Выяем наше исходное множество на экран (или в файл) и удаляем его из BUFFER.

Повторяем шаги 1-2 с каждым множеством из BUFFER, пока BUFFER не станет пустым. При этом множество, в котором первый элемент "дошел" до 1 не скидываем в BUFFER, а выдаем на экран сразу.

Это первое, что приходит в голову. Метод должен быть неплох по времени выполнения, но будет жрать много памяти.
18 Октября 2006 09:22      
K_i_t
Бывший океанец
Сообщений: 9664256

Пример (чтобы избежать недоразумений):

Берем {91,1,1,1,1,1,1,1,1,1} и получаем:

1) {90,2,1,1,1,1,1,1,1,1}
2) {90,1,2,1,1,1,1,1,1,1}
3) {90,1,1,2,1,1,1,1,1,1}
4) {90,1,1,1,2,1,1,1,1,1}
5) {90,1,1,1,1,2,1,1,1,1}
6) {90,1,1,1,1,1,2,1,1,1}
7) {90,1,1,1,1,1,1,2,1,1}
{90,1,1,1,1,1,1,1,2,1}
9) {90,1,1,1,1,1,1,1,1,2}
18 Октября 2006 09:27      
K_i_t
Бывший океанец
Сообщений: 9664256

Не, это я намудрил, так у нас куча дубликатов будет...
18 Октября 2006 11:26      
K_i_t
Бывший океанец
Сообщений: 9664256

Фигня, можно совсем просто:

function GetCombinations(NumElements, Sum): ElementList
{
if (NumElements == 1) return {Sum}; // выход
for (i = 1; i < Sum - NumElements; i++)
{
M = GetCombinations(NumElements - 1, Sum - i);
for (j = 0; j < M.Size(); j++) M = {i} + M;
}
return M;
}
18 Октября 2006 11:43      
_name_
Капитан 2го ранга
Сообщений: 3618

K_i_t пишет:
Фигня, можно совсем просто:

function GetCombinations(NumElements, Sum): ElementList
{
if (NumElements == 1) return {Sum}; // выход
for (i = 1; i < Sum - NumElements; i++)
{
M = GetCombinations(NumElements - 1, Sum - i);
for (j = 0; j < M.Size(); j++) M = {i} + M;
}
return M;
}



spasibo, tok s bufferom bylo lu4she.
i pomimo wsego:

mne nuzhny {kombinacii} w 5. stepeni, ja poschital 4to za pol goda komp wse pros4itaet.. ((((
----------------------
рифмы в куче это классно
соберите рифмы в кучу
20 Октября 2006 19:08      
K_i_t
Бывший океанец
Сообщений: 9664256

_name_ пишет:
spasibo, tok s bufferom bylo lu4she.

Первый вариант был не лучше, а просто неправильным.
_name_ пишет:
mne nuzhny {kombinacii} w 5. stepeni, ja poschital 4to za pol goda komp wse pros4itaet.. ((((

Ерунда. Откуда ты взял 5-ю степень? У тебя вообше не полиномиальный рост. Подумай сам. Для суммы 100 и 10-и элементов у тебя получается что-то около 10 в 12-ой степени комбинаций. При скидывании в ASCII-файл получишь файлик весом всего-навсего около 15000 гигабайт Это если делать "в лоб".

Еще можно использовать MDD-представление проблемы для просчета и записи: посчитать за пару секунд и получить файл с теми же данными, но весом в пару килобайт. Очень красивая штука, но чуть посложнее.
20 Октября 2006 22:11      
Bier
Капитан 1го ранга



Сообщений: 15098

Такая задача в C#: есть название компонента (Control) в виде текста, например "ComboBox" и нужно из него создать компонент. Как это сделать?
----------------------
Я пою в душе. Билеты ещё есть.
28 Февраля 2007 14:26      
К.К.Михельсон
Бывший океанец
Сообщений: 9664256

Bier пишет:
Такая задача в C#: есть название компонента (Control) в виде текста, например "ComboBox" и нужно из него создать компонент. Как это сделать?


ключевое слово reflection.

спецы c# поправят меня, если не так, но как-то в этом духе:

Assembly asm = Assembly.Load("mscorlib.dll");
Type type = asm.GetType(classname);
object obj = asm.CreateInstance(classname);
28 Февраля 2007 14:35      
Vodila
Поручик
Сообщений: 1245

можно сделать:
Type asmType = Type.GetType("ControlTypeName");
if(asmType == null)
return null;
ConstructorInfo info = asmType.QueryConstructor(Type.EmptyTypes);
if(info==null)
return null;
return info.Invoke(null);

при этом обрабатывать Event "AppDomain.CurrentDomain.AssemblyResolve"
----------------------
В воздухе появилось что–то окончательное и думать стало некому, нечего, нечем да и незачем.
28 Февраля 2007 15:26      
Bier
Капитан 1го ранга



Сообщений: 15098

Спасибо, я попробую что-нить из этого сделать
----------------------
Я пою в душе. Билеты ещё есть.
01 Марта 2007 12:06      
Bier
Капитан 1го ранга



Сообщений: 15098

Vodila пишет:
можно сделать:
Type asmType = Type.GetType("ControlTypeName");
if(asmType == null)
return null;
ConstructorInfo info = asmType.QueryConstructor(Type.EmptyTypes);
if(info==null)
return null;
return info.Invoke(null);

при этом обрабатывать Event "AppDomain.CurrentDomain.AssemblyResolve"

Как я понял это не то, потому что GetType возвращает тип существующей инстанции, а у меня просто текст.
----------------------
Я пою в душе. Билеты ещё есть.
21 Марта 2007 12:06      
nesher
Штурман



Сообщений: 809

Assembly assembly = typeof(System.Windows.Forms.Control).Assembly;
Type type = assembly.GetType("System.Windows.Forms.ComboBox");
ConstructorInfo constructorInfo = type.GetConstructor(Type.EmptyTypes);
object instance = constructorInfo.Invoke(new object[0]);

Важно указать полное имя класса (namespace+classname). Type.GetType не всегда знает в какой ассембли ему искать тип и не всегда возврашает тип. Поэтому надо сначало каким нибудь способом получить ассембли. Если ассембли референцырована, то можно сделать как в примере. В противном случае надо загрузит ассембли с помошю Assembly.Load, Assembly.LoadFrom или Assembly.LoadFile.
21 Марта 2007 12:47      
Bier
Капитан 1го ранга



Сообщений: 15098

nesher пишет:
Assembly assembly = typeof(System.Windows.Forms.Control).Assembly;
Type type = assembly.GetType("System.Windows.Forms.ComboBox");
ConstructorInfo constructorInfo = type.GetConstructor(Type.EmptyTypes);
object instance = constructorInfo.Invoke(new object[0]);

Важно указать полное имя класса (namespace+classname). Type.GetType не всегда знает в какой ассембли ему искать тип и не всегда возврашает тип. Поэтому надо сначало каким нибудь способом получить ассембли. Если ассембли референцырован ...

А что такое Assembly и что ему тогда надо указать?
----------------------
Я пою в душе. Билеты ещё есть.
21 Марта 2007 12:50      
Bier
Капитан 1го ранга



Сообщений: 15098

nesher пишет:
Assembly assembly = typeof(System.Windows.Forms.Control).Assembly;
Type type = assembly.GetType("System.Windows.Forms.ComboBox");
ConstructorInfo constructorInfo = type.GetConstructor(Type.EmptyTypes);
object instance = constructorInfo.Invoke(new object[0]);

Важно указать полное имя класса (namespace+classname). Type.GetType не всегда знает в какой ассембли ему искать тип и не всегда возврашает тип. Поэтому надо сначало каким нибудь способом получить ассембли. Если ассембли референцырован ...

Работает! Большое спасибо Я, правда, нихрена не понимаю в этом, но работает
----------------------
Я пою в душе. Билеты ещё есть.
21 Марта 2007 12:53      
nesher
Штурман



Сообщений: 809

Bier пишет:
А что такое Ассемблы и что ему тогда надо указать?

Ассемблы это в принцыпе файл (длл или ехе) в котором находятса классы.
mscorlib.dll, System.dll, System.Windows.Forms.dll - вот примеры Assembly.
21 Марта 2007 13:11      
Bier
Капитан 1го ранга



Сообщений: 15098

nesher пишет:
Ассемблы это в принцыпе файл (длл или ехе) в котором находятса классы.
mscorlib.dll, System.dll, System.Windows.Forms.dll - вот примеры Assembly.

Круто Спасибо
----------------------
Я пою в душе. Билеты ещё есть.
21 Марта 2007 14:45      
_name_
Капитан 2го ранга
Сообщений: 3618

хмм.. головоломка. собственно не знаю существует решение или нет, но попробую. Тема- SQL
след. вопрос:
как вычесть один столбец из одной таблицы от другого столбца из другой таблицы по одному ключику

таблица 1 : ключик:число1 (N элементов)
таблица 2 : ключик:число2 (N элементов)

результат: ключик:число1-число2 (N элементов)

спасибо
----------------------
рифмы в куче это классно
соберите рифмы в кучу
27 Июля 2007 14:31      
_name_
Капитан 2го ранга
Сообщений: 3618

_name_ пишет:
хмм.. головоломка. собственно не знаю существует решение или нет, но попробую. Тема- СQЛ
след. вопрос:
как вычесть один столбец из одной таблицы от другого столбца из другой таблицы по одному ключику

таблица 1 : ключик:число1 (Н элементов)
таблица 2 : ключик:число2 (Н элементов)

результат: ключик:число1-число2 (Н элементов)

спасибо

решение найдено, а теперь если в одной таблице N элементов а во второй M и некоторые ключики совпадают, как сделать MERGE
----------------------
рифмы в куче это классно
соберите рифмы в кучу
27 Июля 2007 16:18      
rushbone
Океанец



Сообщений: 52479

Тема переносится в раздел "В помощь вебмастеру".
25 Августа 2007 10:23      
lolipop
Бывший океанец
Сообщений: 9664256

Grossmutters_G пишет:
В этой теме я бы очень хотел обратиться в первую очередь к инструменту программиста-разработчика - к языку программирования, на котором он ваяет свои шедевры.

Вот задачка первая, язык программирования "С":
Нижеприведенный кусок кода должен был выполнять следующие действия, а именно: выдать на экран 20 знаков "*"... Но в спешке, программист Вася вместо "++" после переменной i написал "--"...

Задача: исправить код так, чтобы он выполнял надлежащие ему действия путем замены или добавления (но не обоих ...


int i;
for(i=0;i
13 Ноября 2009 11:00      
 Страница   из 15    |  Показывать   на странице
Перейти в
© Stanislav Neuberger 2001-2K21 · Impressum · Служба поддержки