Series38. Дано целое число $$K$$, а также $$K$$ наборов ненулевых целых чисел. Каждый набор содержит не менее двух элементов, признаком его завершения является число 0. Для каждого набора выполнить следующее действие: если элементы набора возрастают, то вывести 1; если элементы набора убывают, то вывести –1; если элементы набора не возрастают и не убывают, то вывести 0.
3 решения результат 1 и -1 выводится, только если последовательность строго монотонна::
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
program Series38; var K,Ki,A,A1:Integer; CheckUP,CheckDown:Boolean; begin Write('K: '); Readln(K); for Ki:=1 to K do begin CheckUp:=False; CheckDown:=False; Write('A: '); Readln(A); repeat A1:=A; Write('A: '); Readln(A); if (A1<=A) and (A<>0) then CheckUp:=True; if (A1>=A) and (A<>0) then CheckDown:=True; until A=0; Writeln('---'); If CheckUP and CheckDown then Writeln(0) else If CheckUP then Writeln(1) else If CheckDown then Writeln(-1); end; end. |
Решение olegst1975:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
program Series38; var K,Ki,A,A1,CheckUP,CheckDown:Integer; begin Write('K: '); Readln(K); for Ki:=1 to K do begin CheckUp:=0; CheckDown:=0; Write('A: '); Readln(A); repeat A1:=A; Write('A: '); Readln(A); if (A1< =A) and (A<>0) then CheckUp:=1; if (A1>=A) and (A<>0) then CheckDown:=-1; until A=0; Writeln('---'); Writeln(CheckUp+CheckDown); end; end. |
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
program Series38; var K,Ki,A,A1,Check:Integer; begin Writeln(1 div 2 ); Write('K: '); Readln(K); for Ki:=1 to K do begin Check:=2; Write('A: '); Readln(A); repeat A1:=A; Write('A: '); Readln(A); if (Check<>0) and (A<>0) then begin if (Check=2) then if (A1<=A) then Check:=1 else Check:=-1; if (A1<=A) then Check:=(Check+1) div 2; if (A1>=A) then Check:=(Check-1) div 2; end; until A=0; Writeln('---'); Writeln(Check); end; end. |
Решение, выводится результат 1 и -1, если последовательность монотонна, если все элементы последовательности равны выводится 0:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
program Series38; var K,Ki,A,A1:Integer; CheckUP,CheckDown:Boolean; begin Write('K: '); Readln(K); for Ki:=1 to K do begin CheckUp:=False; CheckDown:=False; Write('A: '); Readln(A); repeat A1:=A; Write('A: '); Readln(A); if (A1<A) and (A<>0) then CheckUp:=True; if (A1>A) and (A<>0) then CheckDown:=True; until A=0; Writeln('---'); If CheckUP and CheckDown then Writeln(0) else If CheckUP then Writeln(1) else If CheckDown then Writeln(-1) else Writeln(0); end; end. |
Другие задачи из раздела Series можно посмотреть здесь.
Это решение предыдущей задачи.
Было:
Стало:
избавился от
Добавив не строгие неравенства.
Как результат просят вывести числа поэтому переменные CheckUP и CheckDown используем числовые
Ура, с Series больше надоедать не буду
Не понравилось, что используется две целочисленные переменные вместо двух булевых…
Попытался сократить хотя бы до одной целочисленной переменной, но получилось ещё запутанней.
А по поводу:
> Ура, с Series больше надоедать не буду
Для меня это грустняшка… я счастлив когда мне пишут комментарии…
Можно так:
var k:Integer;
begin
write(‘Количество наборов чисел k= ‘);
read(k);
write(‘Введите ‘,k,’ наборов чисел : ‘); //наборы разделяет 0
for var i:=1 to k do
begin
var a:=ReadSeqIntegerWhile(x->x0).ToArray;
var h:= a.SequenceEqual(a.Sorted);
var d:= a.SequenceEqual(a.SortedDescending);
If (a.Count>=2)and h and not d
then writeln(‘Набор ‘,i,’: 1′) else
If (a.Count>=2)and d and not h
then writeln(‘Набор ‘,i,’: -1′) else
If (a.Count>=2)and h and d or not(h or d)
then writeln(‘Набор ‘,i,’: 0′) else
end;
end.
Можно так:
var k:Integer;
begin
write(‘Количество наборов чисел k= ‘);
read(k);
write(‘Введите ‘,k,’ наборов чисел : ‘); //наборы разделяет 0
for var i:=1 to k do
begin
var a:=ReadSeqIntegerWhile(x->x0).ToArray;
var h:= a.SequenceEqual(a.Sorted);
var d:= a.SequenceEqual(a.SortedDescending);
If (a.Count>=2)and h and not d
then writeln(‘Набор ‘,i,’: 1′) else
If (a.Count>=2)and d and not h
then writeln(‘Набор ‘,i,’: -1′) else
If (a.Count>=2)and h and d or not(h or d)
then writeln(‘Набор ‘,i,’: 0′) else
end;
end.