На этом форуме отвечают на конкретные вопросы. Фраза «я не понимаю, как решать» — это не вопрос. На вопрос «как решить задачу №X» вас отошлют к материалам сайта kpolyakov.spb.ru. За бессвязный поток слов и неспособность формулировать свои мысли — бан.

Если у вас не сходится ответ на какую-то задачу, пожалуйста сразу представляйте свое «правильное» решение.
Программы "заворачивайте" в тэг [pre2]...[/pre2], при этом сохраняются все отступы и применяется моноширинный шрифт. Если у вас используется сочетание "[i]" для обозначения элемента массива или строки, ставьте пробел после открывающей скобки. Иначе система выделит все дальнейшее курсивом.

Для регистрации на форуме щелкните по ссылке «Вход-регистрация» вверху страницы. В открывшееся окошко «ник» введите свою фамилию на русском языке (например, Иванов). В окошко «пароль» введите придуманный вами пароль, состоящий из латинских букв и цифр. Поставьте галочку в окошке «зарегистрироваться, я новый участник» и нажмите кнопку «ОК».

АвторСообщение



Сообщение: 1
ссылка на сообщение  Отправлено: 11.05.15 15:38. Заголовок: C4, Досрочный ЕГЭ


Задание:
На спутнике «Восход» установлен прибор, предназначенный для измерения
солнечной активности. Каждую минуту прибор передаёт по каналу связи
неотрицательное целое число – количество энергии солнечного излучения,
полученной за последнюю минуту, измеренное в условных единицах.
Временем, в течение которого происходит передача, можно пренебречь.
Необходимо найти в заданной серии показаний прибора минимальное
нечётное произведение двух показаний, между моментами передачи которых
прошло не менее 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.
Вопрос:
Эффективна ли данная программа по времени и по памяти?
Заранее спасибо!

Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 3 [только новые]


Администратор




Сообщение: 811
ссылка на сообщение  Отправлено: 12.05.15 13:58. Заголовок: RedShade7 пишет: Эфф..


RedShade7 пишет:
 цитата:
Эффективна ли данная программа по времени и по памяти?

Она неверное работает, даже на тестовом примере.

___________________________________________________
Имей мужество пользоваться собственным умом. (И. Кант)
Спасибо: 0 
ПрофильЦитата Ответить



Не зарегистрирован
ссылка на сообщение  Отправлено: 15.06.15 03:57. Заголовок: Таким же способом делал - работает.


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.

Спасибо: 0 
ПрофильЦитата Ответить



Сообщение: 1
ссылка на сообщение  Отправлено: 15.06.15 03:57. Заголовок: Таким же способом делал - работает.


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.

Спасибо: 0 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 1535
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет