Помогите составить алгоритм преобразования

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Chrek625, 14 Jan 2011.

  1. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Использую С++
    Есть массив
    Code:
    char model[] = "1234567";
    (в массиве могут быть не только цифры, они приведены для примера )
    а так же массив
    Code:
    char test[7];
    в нескольких циклах я перебираю через индекс 2 массива все элементы 1 массива тоесть
    зарание указанно
    Code:
    temp[0] = model[0];
    temp[1] = model[0];
    temp[2] = model[0];
    temp[3] = model[0];
    и в условие цикла указанно что как только первый элемент 2 массива полностью по очереди пройдет все элементы 1 массива то 2 элемент увеличивается на один элемент, а когда второй элемент дойдет до последнего элемента 1 массива на один элемент увеличивается значение 3 элемента ну вообщем вот чт получается
    Code:
    1111
    2111
    3111
    4111
    5111
    6111
    7111
    1211
    2211
    ...
    7211
    1311
    2311
    ...
    7311
    1411
    ...
    1511
    ...
    7511
    ...
    1611
    2611
    ...
    7711
    1121
    2121
    ...
    4771
    5771
    6771
    7771
    1112
    2112
    3112
    4112
    и так далее.

    как вы понимаете что каждая комбинация цифр есть определённый номер
    то есть к примеру у получившейся комбинации 1111 будет под номером 1
    2111 под номером 2 а у строчки 1211 номер 8 и так далее,
    но вот помогите придумать алгоритм при котором можно будет определить какая комбинация будет например под номером 300, но при этом не проходя все циклы?
    То есть можно ли как то зная все параметры к используемые в цикле высчитать что получится на определенной строчке? (то есть как узнать что на 300 строчке будет комбинация 6171 при моих условиях циклов не проходя все мои циклы?) Если можно то как?
    (Если поможете примером кода буду очень благодарен)
    Заранее извиняюсь если вопрос глупый или плохо объяснил чего хочу...
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    Ну как бы длинна модели = 7 символов и ты знаешь что пройдя 7 итераций
    будет
    temp[0]==model[0]
    temp[1]==model[1]
    пойдя 14 итераций я думаю будет temp[2]==model[1]. Уже какая никакая зависимость )

    А вообще эта наука называется комбинаторика. гугли
    http://algolist.manual.ru/maths/combinat/index.php
     
    _________________________
    #2 Gar|k, 15 Jan 2011
    Last edited: 15 Jan 2011
  3. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Gar|k
    7 символов взято для примера только, через такую зависимость можно высчитать если число комбинаций будет маленьким, а если номер комбинации будет за приделами нескольких миллионов то затрата времени слишком возрастает чтобы так пытаться определять...
     
  4. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    N - номер строки
    M - масимальное число елемента
    K - максимальное количество елементов
    a1, a2, a3, a4, ... aK - елементы

    Универсальное уравнение:

    N = a1 + (a2-1) * M^1 + (a3-1) * M^2 + (a4-1) * M^3 + ... + (aK - 1) * M^K-1;


    Твой пример.
    Уравнение
    N = a1 + (a2-1) * M^1 + (a3-1) * M^2 + (a4-1) * M^3
    Нахождения номера строки для елемента 1211
    N = 1 + (2-1) * 7^1 + ( 1-1) * 7^2 + (1-1) * 7^3 = 1 + 7 + 0 + 0 = 8

    100% работоспособность не гарантирую, решил в голове чисто математически, программно проверять лень.
    Код только за символическое вознаграждение, и наверно уже не сегодня. Мне в дорогу собираться нужно.
     
    #4 Jakeroid, 15 Jan 2011
    Last edited: 15 Jan 2011
  5. Chrek625

    Chrek625 Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    143
    Likes Received:
    13
    Reputations:
    -7
    Jakeroid
    мне нужно наоборот узнавать что находится в определенной строке зная ее номер, а по твоей формуле зная элемент можно определить строку.
     
  6. Jakeroid

    Jakeroid Member

    Joined:
    9 May 2009
    Messages:
    199
    Likes Received:
    12
    Reputations:
    1
    Что бы обратную написать, нужно деление по модулю юзать. Я подумаю, если что отпишусь. Не так силен в математике, что бы сразу решить.