• С++ - как решить задачку про "Болты и Гайки"?

    FirstX
    @FirstX
    .net developer
    Самое интересное, я Вам изначально писал про сложность и даже давал ответ) Смотрите сами: получение пар - сложность квадратичная, потом сортировка вставками (если тот код использовали, что я вам давал) - тоже квадратичная сортировка. Итого 2 * n^2, но 2ка это константа, а при верхней оценке константы не учитываются, поэтому сложность всего алгоритма тоже квадратичная получается.
    Ответ написан
    2 комментария
  • С++ - как решить задачку про "Болты и Гайки"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Algorithmic complexity - верхняя оценка сложности алгоритма. Например, оценка O(n) означает, что сложность линейная, то есть в простом случае проход по массиву осуществляется один раз; O(n2) - квадратичная, для каждого элемента массива проводится сравнение с каждым; Пузырьковая сортировка имеет оценку O(n*log(n)). Коротко почитать можно здесь
    Ответ написан
    5 комментариев
  • С++ - как решить задачку про "Болты и Гайки"?

    @Skver0
    с++ я не знаю но чето типа того....

    for(x=0;x<size-1;x++)
    for(y=x+1;y<size;++y)
    if (array1[x]>array2[y])
    {
        temp=array1[x];
        array1[x]=array1[y];
        array1[y]=temp;
        temp=array2[x];
        array2[x]=array2[y];
        array2[y]=temp;
    }
    Ответ написан
    1 комментарий
  • С++ - как решить задачку про "Болты и Гайки"?

    FirstX
    @FirstX
    .net developer
    Код не смотрел, но если правильно понял условие, то нужно обойти в цикле каждый болт и посчитать, сколько для каждого болта есть гаек, у которых размер меньше.

    Описываю случай, когда подразумевается, что все размеры уникальны. Для не уникальных придется идею чуть модифицировать.

    Например болты А = { 2, 3, 7, 5, 4 } и гайки B = { 3, 7, 2, 4, 5 }

    Берем первый болт А0 = 2. Сравнивая с гайками, получаем, что гаек, которых меньше, чем А0 ноль. Это и будет позиция (нулевая) А0 в отсортированном массиве. Тут же кстати можно найти при обходе и тот случай, где они равны (B2) - и B2 ставим тоже в нулевую позицию. (Если можно использовать доп. массив то просто формируем вставляя данные в нужные позиции, если нет - то меняем местами элементы в существующем)

    Берем второй болт A1 = 3. Кол-во меньших гаек - 1. Значит A1 так и остается в A1. Попутно нашли B0, которым ставим в позицию B1.

    Третий болт A2 = 7. Кол-во меньших гаек - 4. Значит A2 ставим в A4. Находим равную гайку - B1 и ставим ее тоже с индексом 4, то есть в B4. И так далее до конца. Получаем 2 отсортированных массива по возрастанию.

    Правда получается, что сложность квадратичная, будет время постараюсь подумать над этим. Если что-то не так понял из условия, то уточните как раз.
    Ответ написан
    5 комментариев
  • С++ - как решить задачку про "Болты и Гайки"?

    @Skver0
    с++ не знаю но возможно вам поможет код на питоне.
    bolts = (4, 3, 2, 1, 5)
    gaiki = (1, 2, 3, 4, 5)
    
    sp = [] # тут будет список списков
    
    for bolt in bolts:
        for gaika in gaiki:
            if gaika == bolt:
                sp.append([gaika, bolt]) # добавляем пары в список sp
    
    print(sp)
    
    n = 1
    while n < len(sp): # пузырьковая сортировка.
        for i in range(len(sp)-n):
            if sp[i][0] > sp[i+1][1]:  # сравниваем болт и гайку.
                sp[i],sp[i+1] = sp[i+1],sp[i]
        n += 1
    print(sp)
    Ответ написан
    1 комментарий