Форум » Обработка числовых последовательностей » C4, Досрочный ЕГЭ » Ответить

C4, Досрочный ЕГЭ

RedShade7: Задание: На спутнике «Восход» установлен прибор, предназначенный для измерения солнечной активности. Каждую минуту прибор передаёт по каналу связи неотрицательное целое число – количество энергии солнечного излучения, полученной за последнюю минуту, измеренное в условных единицах. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний прибора минимальное нечётное произведение двух показаний, между моментами передачи которых прошло не менее 6 минут. Если получить такое произведение не удаётся, ответ считается равным –1. Количество энергии, получаемое прибором за минуту, не превышает 1000 условных единиц. Общее количество показаний прибора в серии не превышает 10 000. Решение: Program _1; Var x,i,j,N:integer;{N-Количество входных данных, i и j-счетчики, x-входное значение} min:array[1..8,1..2]of integer;{8 минимальных, нечетных чисел} maxpos,max:integer;{позиция и значение максимального значения в массиве минимальных чисел} res:integer;{результат} Begin res:=10000; n:=12; maxpos:=1; For i:=1 to 8 do min[i,1]:=10000; For i:=1 to N do Begin Readln(x); If (x mod 2)=1 then If x<min[maxpos,1] then begin min[maxpos,1]:=x; min[maxpos,2]:=i; max:=0; For j:=1 to 8 do If min[j,1]>max then begin max:=min[j,1]; maxpos:=j; end end end; For i:=1 to 8 do For j:=1 to 8 do If (min[i,1]*min[j,1]<res)and(i<>j)and(((min[i,2]-min[j,2])>=6)or((min[i,2]-min[j,2])<=-6)) then res:=min[i,1]*min[j,1]; Writeln(res); end. Вопрос: Эффективна ли данная программа по времени и по памяти? Заранее спасибо!

Ответов - 3

Поляков: RedShade7 пишет: Эффективна ли данная программа по времени и по памяти? Она неверное работает, даже на тестовом примере.

GsReCoN: var a: array [0..8,0..1] of integer; var x,i,N,k,j,m:integer; var S:real; begin; readln(N); if N>8 then begin k:=0; for i:=0 to 8 do a[i,0]:=1000; for i:=1 to N do begin m:=i; //readln(x); x:=random(1000); writeln(x); if x mod 2=1 then begin; k:=k+1; a[k,0]:=x; a[k,1]:=i; if k=8 then break; end; end; end; if (k=8) and (m<N) then for i:=m to N do begin //readln(x); x:=random(1000); writeln(x); if x mod 2 = 1 then if x<a[8,0] then begin j:=7; while (x<a[j,0]) and (0<j) do j:=j-1; for m:=8 downto j+1 do begin a[m,0]:=a[m-1,0]; a[m,1]:=a[m-1,1]; end; a[j,0]:=x; a[j+1,1]:=i; end; end; m:=1000; for i:=k downto 1 do if a[i,0]<=m then begin m:=a[i,0]; j:=a[i,1]; end; x:=1000; S:=1000000; for i:=1 to k do if (a[i,0]<x) and (a[i,1]<>j) then if abs(a[i,1]-j)>5 then begin N:=m*x; if S>N then begin x:=a[i,0]; S:=N; end; end; if (k<2) or (m=1000) then writeln('-1') else Writeln(x*m); for i:=1 to 8 do writeln(i,' ',a[i,0],' ',a[i,1]); writeln(m,',',x); writeln(k); readln; end.

GsReCoN: var a: array [0..8,0..1] of integer; var x,i,N,k,j,m:integer; var S:real; begin; readln(N); if N>8 then begin k:=0; for i:=0 to 8 do a[i,0]:=1000; for i:=1 to N do begin m:=i; //readln(x); x:=random(1000); writeln(x); if x mod 2=1 then begin; k:=k+1; a[k,0]:=x; a[k,1]:=i; if k=8 then break; end; end; end; if (k=8) and (m<N) then for i:=m to N do begin //readln(x); x:=random(1000); writeln(x); if x mod 2 = 1 then if x<a[8,0] then begin j:=7; while (x<a[j,0]) and (0<j) do j:=j-1; for m:=8 downto j+1 do begin a[m,0]:=a[m-1,0]; a[m,1]:=a[m-1,1]; end; a[j,0]:=x; a[j+1,1]:=i; end; end; m:=1000; for i:=k downto 1 do if a[i,0]<=m then begin m:=a[i,0]; j:=a[i,1]; end; x:=1000; S:=1000000; for i:=1 to k do if (a[i,0]<x) and (a[i,1]<>j) then if abs(a[i,1]-j)>5 then begin N:=m*x; if S>N then begin x:=a[i,0]; S:=N; end; end; if (k<2) or (m=1000) then writeln('-1') else Writeln(x*m); for i:=1 to 8 do writeln(i,' ',a[i,0],' ',a[i,1]); writeln(m,',',x); writeln(k); readln; end.




полная версия страницы