Тема: Программистские головоломки. |
K_i_t
Бывший океанец
Сообщений: 9822896
|
А не слишком ли сложно такую ерунду делать через Бельмановское неравенство? 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
Бывший океанец
Сообщений: 9822896
|
Пример (чтобы избежать недоразумений):
Берем {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
Бывший океанец
Сообщений: 9822896
|
|
K_i_t
Бывший океанец
Сообщений: 9822896
|
|
_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
Бывший океанец
Сообщений: 9822896
|
_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
|
|
К.К.Михельсон
Бывший океанец
Сообщений: 9822896
|
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
|
|
Bier
Капитан 1го ранга
Сообщений: 15098
|
|
nesher
Штурман
Сообщений: 809
|
|
Bier
Капитан 1го ранга
Сообщений: 15098
|
|
Bier
Капитан 1го ранга
Сообщений: 15098
|
|
nesher
Штурман
Сообщений: 809
|
Bier пишет: А что такое Ассемблы и что ему тогда надо указать?
Ассемблы это в принцыпе файл (длл или ехе) в котором находятса классы.
mscorlib.dll, System.dll, System.Windows.Forms.dll - вот примеры Assembly.
|
|
|
21 Марта 2007 13:11 |
|
|
Bier
Капитан 1го ранга
Сообщений: 15098
|
|
_name_
Капитан 2го ранга
Сообщений: 3618
|
|
_name_
Капитан 2го ранга
Сообщений: 3618
|
|
rushbone
Океанец
Сообщений: 52482
|
|
lolipop
Бывший океанец
Сообщений: 9822896
|
Grossmutters_G пишет: В этой теме я бы очень хотел обратиться в первую очередь к инструменту программиста-разработчика - к языку программирования, на котором он ваяет свои шедевры.
Вот задачка первая, язык программирования "С":
Нижеприведенный кусок кода должен был выполнять следующие действия, а именно: выдать на экран 20 знаков "*"... Но в спешке, программист Вася вместо "++" после переменной i написал "--"...
Задача: исправить код так, чтобы он выполнял надлежащие ему действия путем замены или добавления (но не обоих ...
int i;
for(i=0;i
|
|
|
13 Ноября 2009 11:00 |
|
|