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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ The variable 'pp' is being used without being initialized http://www.cyberforum.ru/cpp-beginners/thread92966.html
В visual C++ 2008 EE создаю всё как надо ,в файле .cpp пишу вот такой текст программы: #include<iostream> #include<cmath> using namespace std; int main(){ double principal,intrate,pp,numyers,peyment,numer,denom,b,e; setlocale( LC_ALL,"Russian" );
C++ Что это означает? if (!fgets(str,STRLEN, stdin)) и еще for(cnt=0,p=strtok(str,SPCHARS); p!=NULL;p= strtok(NULL,SPCHARS)) прокоментируете пожалуйста if(*p == *(p+strlen(p)-1)) ++cnt; плиззз http://www.cyberforum.ru/cpp-beginners/thread92962.html
Прога на СИ!1!! C++
Распечатать введенную строку, удалив из нее символы, не являющиеся буквами и цифрами, и заменив каждую цифру на ‘*’. Очень нужна помощь кто может помочь буду благодарен... можно на почту или тут...
C++ Фибоначчи
14. В заданном целочисленном массиве распечатать те элементы, порядковые номера которых – числа Фибоначчи, а также определить количество перемен знаков
C++ У меня контрольная(((( на с++ http://www.cyberforum.ru/cpp-beginners/thread92951.html
!Определить, сколько слов во введенном тексте начинаются и оканчиваются одной и той же буквой. Слова разделены пробелами!.
C++ Указать номер того человека, для обслуживания которого потребовалось минимальное время 13. В магазине стоит очередь из N человек. Время обслуживания i-го покупателя ti – случайная величина, распределенная по закону равномерной плотности в интервале . Получить С1,С2,…,СN – времена пребывания в очереди каждого покупателя. Указать номер того человека, для обслуживания которого потребовалось минимальное время. подробнее

Показать сообщение отдельно
axel_
6 / 6 / 1
Регистрация: 06.02.2010
Сообщений: 14
06.02.2010, 13:17     Соединение отрезков
Вот один из способов, но количество действий в нём 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 операций.
 
Текущее время: 21:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru