Задание № 7488

В лаборатории для большого количества частиц производятся замеры электрического заряда каждой из них. Заряд частицы измеряется как целое число (положительное, отрицательное или 0). Частиц, заряд которых измерен, может быть очень много, но не может быть меньше трёх. Заряды всех частиц различны.

В серии обязательно присутствует хотя бы одна частица с отрицательным зарядом. При обработке результатов в каждой серии эксперимента отбирается основное множество значений зарядов. Это такое непустое подмножество значений зарядов частиц (в него могут войти как заряд одной частицы, так и заряды всех частиц серии), для которого произведение значений зарядов является минимальным среди всех возможных подмножеств. При нахождении произведения знак числа учитывается. Если есть несколько таких множеств, то берётся то, которое содержит наибольшее количество элементов.

Вам предлагается написать эффективную, в том числе по используемой памяти, программу (укажите используемую версию языка программирования, например Borland Pascal 7.0), которая будет обрабатывать результаты эксперимента, находя основное множество.

Перед текстом программы кратко опишите используемый Вами алгоритм решения задачи.На вход программе в первой строке подаётся количество частиц N. В каждой из последующих N строк записано одно целое число, по абсолютной величине не превышающее 109. Все N чисел различны.

<!—QuoteBegin—>
<!—QuoteEBegin—>

Пример входных данных:

4

323

0

2

-999

<!—QuoteEnd—>
<!—QuoteEEnd—>

Программа должна вывести в порядке возрастания номера частиц, заряды которых принадлежат основному множеству данной серии.

Нумерация частиц ведётся с единицы.

Пример выходных данных для приведённого выше примера входных данных: 1 3 4.


Решать другие задания по теме: Об­ра­бот­ка символьных строк

Показать ответ
Комментарий:

Содержание верного ответа

Основное множество состоит из всех значений зарядов, кроме 0, если он встречается, и кроме минимального по модулю отрицательного заряда, если отрицательных зарядов чётное число.Программа читает все входные данные один раз, не запоминая все входные данные в массиве, размер которого равен N. Во время чтения данных запоминается номер О, если он встретится (по условию все значения различны, поэтому 0 встречается не больше одного раза), подсчитывается количество отрицательных значений и ищется минимальное по модулю отрицательное значение.После окончания ввода распечатываются все номера, кроме номера 0 и номера минимального по модулю отрицательного значения, но только в случае, если их чётное число.

Ниже приведёны примеры решения задания на языках Паскаль и Бейсик. Допускаются решения, записанные на других языках программирования

\n

Пример правильной и эффективной программы на языке Паскаль

var n, i, j, k, с, min, a: longint; begin	readln(n);	min := -1000000001;	k := 0;	j : = 0;	c : = 0 ;	for i := 1 to n do 	begin		readln(a);		if a = 0 then j := i; 		if a < 0 then		 begin			с : = с + 1 ; 			if a > min then 			begin				min := a; 				k : = i; 			end 		end 	end;	for i := 1 to n do		if (i <> j) and ((c mod 2 <> 0) or (i <> k)) then 			write(i, ' ');end.

Пример правильной и эффективной программы на языке Бейсик

INPUT п min = 0 k = 0 j = 0 с = 0FOR i = 1 ТО n 	INPUT а	IF а = 0 THEN j = i 	IF а < 0 THEN 		с = с + 1		IF (min = 0) OR (a > min) THEN 			min = a 			k = i 		END IF 	END IF NEXT iFOR i = 1 TO n	IF (i <> j) AND ((c MOD 2 <> 0) OR (i <> k)) THEN PRINT i NEXT i END
Ответ:

Нашли ошибку в задании? Выделите фрагмент и нажмите Ctrl + Enter.