LINUX.ORG.RU

Поиск разрывов


0

0

Здравствуйте. Вопрос может и простой ,но что то ничего путного предумать немогу (( Есть ряд чисел 1,2,4,5,6 и т.д Как определить что они идут вподряд и ниодно число не выпало. То есть если ряд вида 1,2,3,5,6 ( то есть выпала 4) нужно записать 4 значение в некий файлик (это не важно записать,распечатать) как реализовать проверку?(язык не важен нужен алгоритм ,мне приходит дурная проверка в цикле следующее меньше предъидущего на 1) Спасибо.

anonymous

у тебя каждый элемент массива должен быть равен его индексу плюс константа общая для всего массива(значение первого элемента, если индексaция массива начинается с 0)

тебе полюбому надо проверить каждый элемент

lg ★★
()

> мне приходит дурная проверка в цикле следующее меньше предъидущего на 1

Может быть больше?

А чем (за исключением указанной неточности) плох этот способ?

DKorolkov
()
Ответ на: комментарий от lg

А я так понял, что он знает наверняка, что это возрастающая последовательность целых чисел.

Если я это понял правильно, то каждый элемент необязательно проверять. В самом простом случае берёшь первый и последний, и если разница между ними правильная, то типа разрывов вообще нет. А если неправильная, то надо, наверное, начинать пополам делить (это исходя ещё из предположения, что разрывов относительно мало, а то может всё равно проще перебрать).

Teak ★★★★★
()

>Как определить что они идут вподряд и ниодно число не выпало
Можно сосчитать сумму арифметической последовательности
как N(N+1)/2 N - наибольший элемент и сравнить с суммой
твоей последовательности. Разность определяет потерянный
элемент (если потерян один)

anonymous
()
Ответ на: комментарий от Teak

Teak ты гений! ТОлько немного не так. последний элемент минус первый плюс 1 минус количество элементов. дает сколько элементов выпало! Спасибо всем

anonymous
()
Ответ на: комментарий от anonymous

Ты задачу нихрена толком формулировать не умеешь, вот все тут угадывали, что тебе надо, а правильно никто не угадал :)

Кто ж знал, что тебе всего-то надо количество этих пропусков узнать.

Teak ★★★★★
()

Делением пополам, очевидно. Ведь не станешь же ты проеврять по очереди все элементы массива... Этим самым делением пополам в каждой точке легко определяется отставание, и, соответственно, для каждого отрезка ты знаешь, есть ли в нём выпадлыш, или нет.

baklan
()
Ответ на: комментарий от baklan

Главное узнать есть ли выпавшие или нет. Список конечно тоже хорошо

anonymous
()
Ответ на: комментарий от anonymous

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

кстати упомянутую формулу n(n+1)/2 придумал помоему Галуа, как раз таки в первом классе, когда уставшая училка чтобы загрузить детей сказала им посчитать сумму от 1 до 100

lg ★★
()
Ответ на: комментарий от lg

>>кстати упомянутую формулу n(n+1)/2 придумал помоему Галуа, как раз таки в первом классе, когда уставшая училка чтобы загрузить детей сказала им посчитать сумму от 1 до 100

Вообще-то Гаус.

kraw ★★★★
()
Ответ на: комментарий от kraw

дада, я помнил что на 'Г' а кто точно не помнил :)

lg ★★
()
Ответ на: комментарий от kraw

Галуа отличился тем, что послал на вступительных экаменах
экзаменатора, приставшего к нему с дурацким вопросом по 
поводу логарифмов. А Галуа в это время подрабатывал 
читая публичные лекции по высшей математике....
Ну и не сдержался :)

anonymous
()
Ответ на: комментарий от anonymous

Это не домашка по математике. Это упрощенная задача. На складе дохрена запчастей с серийными номерами (14 знаков каждый) нужно посмотреть что при продаже они продавались подряд и ни одна не затерялась.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.