Предмет: Информатика, автор: спирит5ллл

Дан массив, содержащий 2015 положительных целых чисел. Напишите на одном из языков программирования программу, которая находит в этом массиве количество локальных минимумов, значение которых кратно 3. Локальным минимумом называется элемент массива, который меньше всех своих соседей. Например, в массиве из 6 элементов, содержащем числа 4, 6,12, 7, 3, 8, есть два локальных минимума: это элементы, равные 4 и 3. Программа должна вывести общее количество подходящих элементов,
значения элементов выводить не нужно.


alamar: и за раз будет задаваться 2015 елементов ?
спирит5ллл: Возможно, числа задаются рандомом
archery: здается мне что это алимпиадная задачка

Ответы

Автор ответа: archery
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


Аноним: Посему не надо множить количество неприятностей, надеясь на оптимизацию компилятора.
archery: ок, учту на будущее что компиляторы могут быть не оптимизированы
Аноним: И еще: никогда не стану писать важных программ в системе, которая проверяет каждый операнд на нулл/нил/не объект: это полный идиотизм, тормозящий работу не то, чтобы в разы - в десятки раз!
archery: почему?
Аноним: Написал уже почему. Никому не нужна программа, которая вместо 5с работает 10 минут.
archery: а как же тогда писать?
Аноним: А вот это умение и отличает настоящего программиста от школьника или просто ремесленника-кодировщика.
archery: я так думаю тут нужен конкретный пример, а то мы возможно о разном говорим.
Аноним: А я думаю, мы и так тут достаточно наспамили, уйдя от темы.
Аноним: Советую Вам разыскать книгу Д.Грис "Конструирование компиляторов для цифровых вычислительных машин", по-моему где-то 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.

Похожие вопросы