Привет всем! Вот такая задачка, есть вектор A[1..100] of integer; надо создать процедуру которая будет показывать сколько нулей в самой длиной цепи из нулей в векторе, и показывать позиции в векторе первого и последнего нуля в цепи, например: x 0000 xx 00 Результат: нулей 4 первая позиция нуля -2 последнея позиция нуля -5.
Lapp
10.12.2010 7:31
Цитата(DarkWishmaster @ 9.12.2010 19:58)
Привет всем! Вот такая задачка,
Привет и тебе! )) Ну, задачка - а дальше-то что?..
TarasBer
10.12.2010 14:50
С каких пор вообще тут пошла привычка не делать ни-че-го для решения своей задачи? Такого я больше ни на одном сайте не вижу, чтобы кто-то приходил и говорил "сделайте за меня", а если такое и происходит, то тема тонет под слоем жирного ржача.
Lapp
10.12.2010 15:33
Цитата(TarasBer @ 10.12.2010 10:50)
С каких пор вообще тут пошла привычка не делать ни-че-го для решения своей задачи? Такого я больше ни на одном сайте не вижу, чтобы кто-то приходил и говорил "сделайте за меня", а если такое и происходит, то тема тонет под слоем жирного ржача.
Не, ну ладно еще ниче не сделают - так еще даже и НЕ ПОПРОСЯТ РЕШИТЬ (или там помочь..) Просто скопипастил условие - и пошел отдыхать, добрый дядя все за меня сделает! Автор этой темы хоть "привет" сказал. И на том спасибо..
Извините конечно, но я не просто скопировал и пошёл отдыхать, и я тоже не люблю такие вещи. Я два часа думал, ну и как-бы получился алгоритм для поиска цепей, но как показать позицию первого и последнего ноля так и не нашёл. Я в 10 классе. процедуры мы вообще не учим, я самостоятельно по книге учусь и на 11 класс, поэтому и несколько туплю. Мне не нужно что бы вы сделали для меня програму, а подкинули идею как это можно сделать. Спасибо за внимание.
мисс_граффити
10.12.2010 21:06
Идея....
1. Считаем, что и начало, и конец максимальной последовательности - 0 элемент (если в массиве нумерация с 1) 2. Идем по массиву. Если встретили 0, ставим флажок в значение "истина"; запоминаем положение начала цепочки. 3. Пока флажок в истине, идем по массиву в поиске первого НЕнулевого элемента (или конца массива). Как только нашли - сбрасываем флажок, запоминаем конец последовательности. Сравниваем длину текущей последовательности с длиной максимальной. Если у текущей больше, меняем значения начала и конца для максимальной.
Кода не будет, пока ты САМ не приложишь хоть какие-то усилия к решению.
З.Ы. 10 класс - это вполне взрослые люди, способные отвечать за свои поступки. ИМХО.
DarkWishmaster
10.12.2010 22:01
k:=0; l:=0; for i:=1 to n do begin if a[i]=0 then k:=k+1; if k>l then begin l:=k; k:=0; end; writeln(l);о во ну тут по поиску цепи более менее мне понятно, но как найти позицию в векторе первого и последнего нуля.
Lapp
11.12.2010 11:31
2 мисс_граффити: флажок тут совершенно лишний.. Признаком того, что найдена последовательность, может являться само отличие ее длины от нуля. Но и это тоже лишнее , потому что можно считать что мы ВСЕГДА внутри последовательности нулей (может быть, нулевой длины)), то есть поиск ее вообще отпадает. И последнее: запоминать и начало, и конец - тоже слишком много чести, когда есть длина .
2 DarkWishmaster: если что непонятно - спрашивай..
const n=60;
var i,l,m,x: integer; a: array [1..n] of integer;
begin Randomize; for i:=1 to n do a[i]:=Random(3); for i:=1 to n do Write(a[i]:(10-(i-1)mod 10) div 5); WriteLn;
l:=0; for i:=1 to n do begin if a[i]=0 then Inc(l) else l:=0; if l>m then begin m:=l; x:=i end end;
Write('max=',m); if m>0 then Write(' x1=',x-m+1,' x2=',x); ReadLn end.
DarkWishmaster
11.12.2010 22:12
Ого спасибо огромное! 1)random(3) он заполняет вектор числами 0,1,2 -> вопрос, можно ли например заполнить тоже по 3 только в другом диапазоне -6,7,9. Или вообще задавать числа? И ещё вопрос, какую функцию выполняеть Randomize? потому что если его удалить то никаких изменений.
Дальше всё понятно, спасибо.
Такое страное ощущения когда думаешь и не получаеться что-то сделать а потом видешь как это просто )
TarasBer
11.12.2010 23:02
Ну, например, random(10) выдаёт число от 0 до 9. А вот random(17)-3 выдаёт число от -3 до 13
randomize нужен для того, чтобы числа не повторялись одни и те же при каждом запуске программы (он инициализирует генератор случайных чисел текущим временем).
DarkWishmaster
11.12.2010 23:12
Спасибо всем! Теперь наверно тему можно закрыть.
мисс_граффити
12.12.2010 1:48
1) в другом диапазоне можно, но он должен быть непрерывный. например -6,-7,-8. или 7,8,9. то есть подряд числа чтобы шли. конечно, при желании можно и -6,7,9 получить, но это надо будет уже писать свою обработку результатов. 2) инициализирует генератор случайных чисел. грубо говоря, чтобы при каждом новом запуске массив получался свой, а не всегда одинаковые.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.