Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
BOR1K
14 / 14 / 4
Регистрация: 19.09.2009
Сообщений: 289
#1

Соединение отрезков - C++

06.02.2010, 12:22. Просмотров 522. Ответов 3
Метки нет (Все метки)

Дан массив целых чисел x[1]..x[m+n], рассматриваемый как соединение двух его отрезков:
начала x[1]..x[m] длины m и конца x[m+1]..x[m+n] длины n. Не использую дополнительных массивов переставить начало и конец.(число действий порядка m+n);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.02.2010, 12:22     Соединение отрезков
Посмотрите здесь:

В массиве целых чисел, рассматриваемом как соединение двух его отрезков, переставить начало и конец - C++
задача: дан массив целых чисел рассматриваемый как соединение двух его отрезков: x..x длины m и конца x..x длины n. не используя доп....

Есть ли у кого похожий алгоритм: распределения отрезков разной длины внутри отрезков фиксированной длины? - C++
Народ помогите мне с программой распределения отрезков разной длины внутри отрезков фиксированной длины с минимальными остатками. К...

Дерево отрезков - C++
Добрый день, помогите пож-та решить задачи на с++. Нашел решение (расписаны все алгоритмы, процедуры подсчета и т. д.), но сложность...

Пересечение отрезков - C++
Есть 2 отрезка, определенные O1(x1, y1, x2, y2) и O2(x1, y1, x2, y2) Нужно узнать, пересекаются ли они. Собственно задача не так...

Длина отрезков - C++
Составить программу для определения, который из двух отрезков на плоскости более длинный. Координаты концов отрезков вводит пользователь из...

Пересечение отрезков. - C++
Решал задачу на acmp про пересечение отрезков, завалился на 20 тесте. Долго просидел, решил прочитать комментарии. Объясните мне, если...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
06.02.2010, 13:07     Соединение отрезков #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, m, i, j;
    int *mas;
    std::cout<<"Введите m:\n> ", 
        std::cin>>m;
    std::cout<<"Введите n:\n> ", 
        std::cin>>n;
    mas = new int[n + m];
 
    for(i = 0; i < m + n; ++i)
        mas[i] = rand()%10;
 
    std::cout<<"Массив:\n";
    for(i = 0; i < m + n; ++i)
        std::cout<<mas[i]<<' ';
    
    int buf;//вот здесь начинается суть задания
    for(i = 0; i < m; ++i)
    {
        buf = mas[0];
        for(j = 0; j < m + n - 1; ++j)
            mas[j] = mas[j + 1];
        mas[m + n - 1] = buf;
    }//здесь заканчивается
    std::cout<<"Результат:\n";
    for(i = 0; i < m + n; ++i)
        std::cout<<mas[i]<<' ';
 
    fflush(stdin);
    std::cin.get();
    return EXIT_SUCCESS;
}
axel_
6 / 6 / 1
Регистрация: 06.02.2010
Сообщений: 14
06.02.2010, 13:17     Соединение отрезков #3
Вот один из способов, но количество действий в нём m*n, а не m+n.
Пусть есть такой массив: ABCDabcdefg, соответственно m = 4, n = 7.
Для решения задачи нужно, чтобы блок abcdefg сместился влево, а блок ABCD - вправо, и результат должен быть abcdefgABCD (если я правильно понял задачу).
Все элементы блока abcdefg можно "протащить" влево, последовательно меняя местами с предыдущим элементом. Таких перестановок для каждого элемента из abcdefg понадобиться столько, сколько элементов в блоке ABCD (т.е. m перестановок). Порядок действий будет таков:

ABCDabcdefg // исходный массив, далее a меняется местами с D (делается swap)
ABCaDbcdefg // a сметился влево на одну позицию, далее a меняется местами с С (делается swap)
ABaCDbcdefg // ...
AaBCDbcdefg // ...
aABCDbcdefg // итак, за 4 перестановки (размер ABCD) элемент а сметился в самое начало, а блок
// ABCD полностью сметился вправо на одну позицию (порядок элементов сохранён)
// далее смещаем элемент b
aABCbDcdefg
aABbCDcdefg
aAbBCDcdefg
abABCDcdefg // блок ABCD сместился ещё на одну позицию, далее всё то же самое для с
. . . . . . . . .
abcdefgABCD // за m*n перестановок достигнут желаемый результат

Добавлено через 6 минут
Во, пока я писал, уже готовое решение дали. Но это тоже не m+n операций.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2010, 13:18     Соединение отрезков
Еще ссылки по теме:

Поиск отрезков - C++
Прошу помочь потому-что я себе уже весь мозг вынес)) Задача номер K в прикрепленном файле. Я практически уверен что у меня прога работает...

Подсчёт положительных отрезков - C++
Помогите, плз. Вообщем, имеется массив чисел, который наполнятется рандомно. Вообщем, нужно подсчитать количество непрерывных...

Медленное дерево отрезков - C++
Приветствую. Пишу дерево отрезков для задачи нахождения сумм на отрезках. Оно работает, даже вроде правильно, но при массиве 105 и...

Найти минимальное подмножество отрезков, объединение которых покрывает заданный отрезок - C++
всем привет! помогите мне решить одну задачу: написать программу. которая для множества заданных отрезков находит минимальное...

Количество треугольников из отрезков - C++
Заданы N (N≤5000) попарно различных длин отрезков. Вычислить количество способов, которыми из отрезков можно сложить треугольник. Вот...

Создать класс отрезков - C++
прошу помощи с программой... может это и не так трудно, но я абсолютно не понимаю как это сделать... кто может помогите пожалуйста, и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
M128K145
Эксперт С++
8284 / 3503 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
06.02.2010, 13:18     Соединение отрезков #4
Хм.. мой код можно немного оптимизировать, заменив строки 21-28 на такие
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int buf;
if(m < n)
    for(i = 0; i < m; ++i)
    {
        buf = mas[0];
        for(j = 0; j < m + n - 1; ++j)
            mas[j] = mas[j + 1];
        mas[m + n - 1] = buf;
    }
else
    for(i = 0; i < n; ++i)
    {
        buf = mas[m + n - 1];
        for(j = m + n - 1; j > 0; --j)
            mas[j] = mas[j - 1];
        mas[0] = buf;
    }
Yandex
Объявления
06.02.2010, 13:18     Соединение отрезков
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru