[an error occurred while processing this directive] [an error occurred while processing this directive]
Придумал !
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Mik 17 января 2002 г. 21:31
В ответ на: От перемены мест слагаемых сумма не меняется, а нужен алгоритм не учитывающий порядок элементов (+) отправлено Начинающий 17 января 2002 г. 19:48

Вроде придумался алгоритм (рекурсивный), перебирающий все сочетания из 50 по 6 по одному разу.
Идея такая: первое сочетание 1,2,3,4,5,6. Дальше так: шестой индекс равен 7, а первые 5 индексов ищем так: пятый индекс равен 5 (соответственно первые 4 - 1,2,3,4), далее пятый индекс равен 6, а первые 4 индекса ищем так: четвертый индекс равен 5, и т.д... Напрашивается рекурсия.
Реализация на Си:


int i[6]; // индексы
void recursion(int a, int b) // перебрать все сочетания из a по b
{
if ( b==1 )
{
for (i[0]=1; i[0]<=b; i[0]++)
{
CheckSum(); // здесь проверяется сумма
}
}
else
{
for (i[b-1]=b; i[b-1]<=a; i[b-1]++)
{
recursion(i[b-1]-1, b-1);
}
}
}
void main(void)
{
recursion(50, 6);
// вызов этой функции должен перебрать все комбинации из 50 по 6
// функция CheckSum() будет вызвана 15890700 раз
// при этом индексы в массиве i[6] будут расположены
// в возрастающем порядке
}

Проверьте, надеюсь я ничего не напутал.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru