Другие языки программирования и технологии
Информатика. Паскаль. Объясните, как решать (БЕЗ МАССИВОВ)
Дана последовательность целых чисел, не превосходящих по модулю `10000`. Ноль - признак конца. Вывести минимальное произведение двух элементов этой последовательности.
Надо найти 6 чисел:
Минимальное отрицательное: NegMin
Два максимальных отрицательных: NegMax1, NegMax2
Максимальное положительное: PosMax
Два минимальны положительных: PosMin1, PosMin2
Если в последовательности были только отрицательные числа, ответ: NegMax1 * NegMax2
Если в последовательности были только положительные числа, ответ: PosMin1 * PosMin2
Во всех прочих случаях ответ: NegMin * PosMax
NegMin := 0;
NegMax1 := -10001;
NegMax2 := -10001;
PosMax := 0;
PosMin1 := 10001;
PosMin2 := 10001;
read(cur);
while cur <> 0 do begin
if cur < NegMin then NegMin := cur;
if cur > PosMax then PosMax := cur;
if (cur < 0) and (cur > NegMax1) then begin
NegMax2 := NegMax1;
NegMax1 := cur
end else if (cur < 0) and (cur > NegMax2) then NegMax2 := cur;
if (cur > 0) and (cur < PosMin1) then begin
PosMin2 := PosMin1;
PosMin1 := cur
end else if (cur > 0) and (cur < PosMin2) then PosMin2 := cur;
read(cur)
end;
if NegMin = 0 then
writeln(PosMin1 * PosMin2)
else if PosMax = 0 then
writeln(NegMax1 * NegMax2)
else
writeln(NegMin * PosMax)
Данный код предполагает, что в последовательности всегда содержится не менее 2 чисел.
Минимальное отрицательное: NegMin
Два максимальных отрицательных: NegMax1, NegMax2
Максимальное положительное: PosMax
Два минимальны положительных: PosMin1, PosMin2
Если в последовательности были только отрицательные числа, ответ: NegMax1 * NegMax2
Если в последовательности были только положительные числа, ответ: PosMin1 * PosMin2
Во всех прочих случаях ответ: NegMin * PosMax
NegMin := 0;
NegMax1 := -10001;
NegMax2 := -10001;
PosMax := 0;
PosMin1 := 10001;
PosMin2 := 10001;
read(cur);
while cur <> 0 do begin
if cur < NegMin then NegMin := cur;
if cur > PosMax then PosMax := cur;
if (cur < 0) and (cur > NegMax1) then begin
NegMax2 := NegMax1;
NegMax1 := cur
end else if (cur < 0) and (cur > NegMax2) then NegMax2 := cur;
if (cur > 0) and (cur < PosMin1) then begin
PosMin2 := PosMin1;
PosMin1 := cur
end else if (cur > 0) and (cur < PosMin2) then PosMin2 := cur;
read(cur)
end;
if NegMin = 0 then
writeln(PosMin1 * PosMin2)
else if PosMax = 0 then
writeln(NegMax1 * NegMax2)
else
writeln(NegMin * PosMax)
Данный код предполагает, что в последовательности всегда содержится не менее 2 чисел.
Иван Троицкий
Почему, только, положительное максимальное принимает значение 0, а пожит. пинимальные 10001,а не наоборот?
начальное значение минимального числа берешь 10001 (что бы точно любое число было меньше его)
метка начало :
читаешь число, если не 0, то берешь минимальное из пары минимальное и новое и идешь на начало.
если 0, то выходишь из цикла и выводишь минимальное число
метка начало :
читаешь число, если не 0, то берешь минимальное из пары минимальное и новое и идешь на начало.
если 0, то выходишь из цикла и выводишь минимальное число
Dimon Павлик
автору нужно найти не минимальное число, а минимальное произведение двух чисел
с массивами очень легко, а вот без них вряд ли выйдет
Анти Чеба Гинадичь
выйдет
Похожие вопросы
- Информатика. Помощь в решении задач по массивам
- люди объясните просто что такое массив и как им пользоваться в паскале
- Задачи по информатике паскаль
- информатика паскаль.
- Помогите пожалуйста найти ошибку в решении задачи по информатике(паскаль) !!!Прошу очень нужно!!!задача простая!!!
- кто может решить и кому не лень помогите с задачей по паскалю, сам плохо с двумерными массивами лажу
- Помогите решить задачу по информатике ...паскаль
- Помогите срочно!!! По информатике Паскаль!!!
- Помогите пожалуйста решить информатику, Паскаль.
- Информатика, Паскаль .