Дан массив, состоящий из целых чисел. Напишите программу, которая определяет, есть ли в...

0 голосов
325 просмотров

Дан массив, состоящий из целых чисел. Напишите программу, которая определяет, есть ли в массиве пара соседних элементов с одинаковыми знаками.
Входные данные

Сначала задано число N — количество элементов в массиве (1N10000). Далее через пробел записаны N чисел — элементы массива. Массив состоит из целых чисел.
Выходные данные

Необходимо вывести слово YES, если существует пара соседних элементов с одинаковыми знаками. В противном случае следует вывести слово NO.
Примеры
Входные данные
5
1 -3 4 -2 1
Выходные данные
NO


Информатика (50 баллов) | 325 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Const
n=10000;
var
a:array[1..n]of integer;
i,n1, flag:integer;
begin
    readln(n1);
        for i:=1 to n1 do
             read(a[i]);
for i:=1 to n1-1 do
   if ((a[i]<0)and(a[i+1]<0))or<br>      ((a[i]>0)and(a[i+1]>0))then
                flag:=1;
if flag=1 then
    writeln('YES')
 else
    writeln('NO');
end.
            

(9.6k баллов)
0

"Крутую" конструкцию ((a[i]<0)and(a[i+1]<0)) or ((a[i]>0)and(a[i+1]>0)) обычно пишут в виде (a[i]*a[i+1])>0. Поскольку еще в начальной школе изучают, что произведение двух чисел, отличных от нуля и имеющих одинаковые знаки есть число положительное.

0

А вообще алгоритм крайне неэффективный, потому что после того, как найдена искомая пара элементов, компьютер будет вынужден продолжать бесцельно перелопачивать остальную часть массива. что мешало организовать выход из цикла по условию - ума не приложу. Можно было использовать ненавистный канонам структурного программирования (привет Эдгару Дейкстре!) break, или применить цикл c пред/постусловием.