Дан массив, содержащий 2015 положительных целых чисел. Напишите на одном из языков программирования программу, которая находит в этом массиве количество локальных минимумов, значение которых кратно 3. Локальным минимумом называется элемент массива, который меньше всех своих соседей. Например, в массиве из 6 элементов, содержащем числа 4, 6,12, 7, 3, 8, есть два локальных минимума: это элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов,
значения элементов выводить не нужно.
alamar:
и за раз будет задаваться 2015 елементов ?
Возможно, числа задаются рандомом
здается мне что это алимпиадная задачка
Ответы
Ответ дал:
0
a=[]
for i in 1..2015
a<<Random.rand(200)-100
end
p a
k=0
for i in 0...a.size
if (a[i]%3==0) and ((i==0 and a[0]<a[1]) or (i==a.size-1 and a[i]<a[i-1]) or (a[i]<a[i-1] and a[i]<a[i+1]))
k+=1
end
end
p k
for i in 1..2015
a<<Random.rand(200)-100
end
p a
k=0
for i in 0...a.size
if (a[i]%3==0) and ((i==0 and a[0]<a[1]) or (i==a.size-1 and a[i]<a[i-1]) or (a[i]<a[i-1] and a[i]<a[i+1]))
k+=1
end
end
p k
Посему не надо множить количество неприятностей, надеясь на оптимизацию компилятора.
ок, учту на будущее что компиляторы могут быть не оптимизированы
И еще: никогда не стану писать важных программ в системе, которая проверяет каждый операнд на нулл/нил/не объект: это полный идиотизм, тормозящий работу не то, чтобы в разы - в десятки раз!
почему?
Написал уже почему. Никому не нужна программа, которая вместо 5с работает 10 минут.
а как же тогда писать?
А вот это умение и отличает настоящего программиста от школьника или просто ремесленника-кодировщика.
я так думаю тут нужен конкретный пример, а то мы возможно о разном говорим.
А я думаю, мы и так тут достаточно наспамили, уйдя от темы.
Советую Вам разыскать книгу Д.Грис "Конструирование компиляторов для цифровых вычислительных машин", по-моему где-то 1972г. издания - я видел её в интернете как-то. Там большой материл по методам разбора выражений и отдельная глава по оптимизации. Кое-что там устарело, но в целом... когда мне нужен был блок разбора выражений для онлайновой работы, алгоритмы я брал там.
Ответ дал:
1
const
n=2015;
var
a:array[1..n] of integer;
i,k: integer;
begin
Randomize;
for i:=1 to n do a[i]:=Random(300)+1;
if (a[1]<a[2]) and (a[1] mod 3=0) then k:=1 else k:=0;
if (a[n]<a[n-1]) and (a[n] mod 3=0) then Inc(k);
for i:=2 to n-1 do
if (a[i-1]<a[i]) and (a[i]<a[i+1]) and (a[i] mod 3=0) then Inc(k);
Writeln('Чсло локальных минимумов равно ',k);
end.
n=2015;
var
a:array[1..n] of integer;
i,k: integer;
begin
Randomize;
for i:=1 to n do a[i]:=Random(300)+1;
if (a[1]<a[2]) and (a[1] mod 3=0) then k:=1 else k:=0;
if (a[n]<a[n-1]) and (a[n] mod 3=0) then Inc(k);
for i:=2 to n-1 do
if (a[i-1]<a[i]) and (a[i]<a[i+1]) and (a[i] mod 3=0) then Inc(k);
Writeln('Чсло локальных минимумов равно ',k);
end.
Вас заинтересует
2 года назад
2 года назад
2 года назад
9 лет назад
9 лет назад