Larisa-Andrei
?>

Водномерном массиве, состоящем из n целых элементов, вычислите произведение элементов массива, стоящих на нечетных позициях и расположенных между первым и вторым нулевыми элементами.

Информатика

Ответы

agaltsova86
Var a: array[1..100] of integer;
    i,n,bg,nd,s: integer;
begin
  write('n = '); readln(n);
  randomize;
  bg:=0;  nd:=0;
  for i:=1 to n do 
  begin
    a[i]:=random(10);
    write(a[i],' ');
    if a[i]=0 then
       if (bg>0) and (nd=0) then nd:=i
       else if bg=0 then bg:=i;
  end; 
  writeln;
  if bg+nd>1 then
  begin
    if (bg mod 2=0) then inc(bg)
    else bg:=bg+2;
    if (nd mod 2=0) then dec(nd)
    else nd:=nd-2;
    writeln('начало: ',bg,'  конец: ',nd);  
    s:=1;
    repeat
      s:=s*a[bg];
      bg:=bg+2;
    until bg>nd;
    writeln('произведение: ',s);
  end
  else writeln(0);
end.

n = 15
4 4 7 0 3 5 6 1 1 8 8 4 0 1 9 
начало: 5  конец: 11
произведение: 144
mar1030

Самая оптимальная стратегия угадывания - дихотомия, то есть деление отрезка пополам и задавание вопроса больше? (или меньше?)

Например, загадано 50

Последовательность

32   64/2            больше

48   (32+64)/2   больше

56   (48+64)/2   меньше

52   (48+56)/2   меньше

50   (48+52)/2   попал

 

Теперь о задаче. Вопрос очень некорректный, если бы он звучал, как сколько попыток нужно сделать, чтобы угадать? , то решение простое

64 = 2^6, поэтому нужно 6 попыток 6 = 110b, значит 3 бит достаточно, чтобы в них разместить это количество попыток.

НО в задаче вопрос-то другой! Потому что в процессе отгадывания на каждом шаге нужно знать 1. Концы отрезка, 2. ответ

Концы это 6 бит и 6 бит +ответ 1 бит, итого 13 бит на шаг *6 = 78 бит. Можно ещё сократить немного, так как в последующем вопросе используется информация из предыдущего(один из концов интервала).

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

 

 

bk4552018345
Delphivar  a1, a2: array of integer;  n, c, i: integer; procedure PrintDescending(a: array of integer); var i, j, max: integer; begin  for i := 0 to Length(a) - 1 do  begin    for j := 0 to Length(a) - 1 do      if a[j] > a[max] then max := j;    Write(a[max], ' ');    a[max] := -10001;  end; end; begin  //Запрашиваем ввод длины массива:  Write('Введите длину массива: ');  Read(n);    //Устанавливаем длину массивов:  SetLength(a1, n);  SetLength(a2, n);    //Заполняем первый массив случайными числами:  for i := 0 to n - 1 do    a1[i] := Random(201) - 100;    //Заполняем второй массив только нечётными элементами первого:  for i := 0 to n - 1 do    if Abs(a1[i]) mod 2 = 1 then      begin      a2[c] := a1[i];      c := c + 1;    end;    //Урезаем второй массив:  SetLength(a2, c);    //Выводим первый массив:  for i := 0 to n - 1 do    Write(a1[i], ' ');  Writeln;    //Выводим второй массив в порядке убывания:  if c = 0 then Write('Нечётных элементов нет.')  else PrintDescending(a2); end.

Пример работы:


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

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Водномерном массиве, состоящем из n целых элементов, вычислите произведение элементов массива, стоящих на нечетных позициях и расположенных между первым и вторым нулевыми элементами.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

nsoro937
TatiyanaBe20135263
Марюк-Мубариз
vvk2008
nalekseeva62
Levinalx4938
Veronika343
Linichuk
Zukhra Andreevich1040
Dmitrievna405
Sergei-Gradus199
cholga69
elbabitch2014
Milovidova
Vetroff-11