Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разложить число по списку элементов / 12 сообщений из 12, страница 1 из 1
10.09.2013, 14:05
    #38392226
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Вообще суть такая.
Есть некое число int diff - оффсет от правильного числа.
Есть некий список List<int> weakPositions (изначально забит нулями).

Надо составить все возможные варианты списков дабы число diff разложить по элементам weakPositions.
По сути задачи и предыдущего кода, элемент нового списка может быть 0 или 1. Если больше, то проблема уже в вышестоящем коде, а не здесь.

Пример 1:
diff == 1
weakPositions.Count == 2
Ответ:
2 списка: {1, 0} и {0, 1}

Пример 2:
diff == 2
weakPositions.Count == 3
Ответ:
3 списка: {1, 1, 0} и {1, 0, 1} и {0, 1, 1}

Пример 3: тривиальный
diff == 2
weakPositions.Count == 2
Ответ:
1 список: {1, 1}

Спасип
...
Рейтинг: 0 / 0
10.09.2013, 14:09
    #38392232
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
weakPositions у меня изначально есть, и длина его заранее определяется.
То есть она не плавающая, а жестка фиксируется.
...
Рейтинг: 0 / 0
10.09.2013, 14:28
    #38392279
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Странно (2, 3) => {1, 1, 0} и {1, 0, 1} и {0, 1, 1}

Почему не

(2, 3) => {0, 0, 0} и {0, 0, 1} и {0, 1, 0} и {0, 1, 1} и {1, 0, 0} и {1, 0, 1} и {1, 1, 0} и {1, 1, 1}

?
...
Рейтинг: 0 / 0
10.09.2013, 14:34
    #38392292
Pallaris
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
МСУ,

из 0,0,0 число 2 не получить. Если я правильно понял, сумма из WeakPositions должна давать diff.
...
Рейтинг: 0 / 0
10.09.2013, 14:34
    #38392294
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Из условий задачи потому что.
надо разложить все число diff в списки.
то есть если diff == 2, то в списке будет ровно 2 единицы.
...
Рейтинг: 0 / 0
10.09.2013, 14:36
    #38392299
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
PallarisМСУ, из 0,0,0 число 2 не получить. Если я правильно понял, сумма из WeakPositions должна давать diff.
А это уже вторично. Первое - получаем все комбинации a^b, потом крутимся по ним в цикле и сверяемся по сумме или что там ему нужно.
...
Рейтинг: 0 / 0
10.09.2013, 14:38
    #38392304
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
tualто есть если diff == 2, то в списке будет ровно 2 единицы.
Вот алгоритм для полного перебора. С помощью него получай доступные комбинации, а потом в соответствие со своей логикой усекай. Идея понятна?
...
Рейтинг: 0 / 0
10.09.2013, 14:41
    #38392307
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Я как раз зашел узнать как перебрать все комбинации, составить их :)
МСУ, твой ответ, это как раз формулировка моего вопроса
...
Рейтинг: 0 / 0
10.09.2013, 14:43
    #38392318
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
И если что желательно без linq, у меня тут нет2
...
Рейтинг: 0 / 0
10.09.2013, 14:45
    #38392321
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
МСУВот алгоритм для полного перебора
Упс, не вставилось...

http://codearticles.ru/articles/2405
...
Рейтинг: 0 / 0
10.09.2013, 14:55
    #38392340
tual
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Тут нечто подобное

Только интересно что быстрее Convert.ToString или та рекурсия в комментах
...
Рейтинг: 0 / 0
10.09.2013, 15:52
    #38392450
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разложить число по списку элементов
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
int diff = 2;
for (int i = combinations.Count - 1; i >= 0; i--)
{
    var sum = combinations[i].ToCharArray().Select(d => int.Parse(d.ToString())).Sum();
    if (diff != sum)
    {
        combinations.RemoveAt(i);
    }
}
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разложить число по списку элементов / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]