)дан массив, содержащий 2016 положительных целых чисел, не превышающих 1000. необходимо найти и вывести максимальный из тех элементов этого массива, восьмеричная запись которых содержит не менее четырёх цифр и оканчивается цифрой 4. если таких чисел в массиве нет, ответ считается равным нулю. исходные данные объявлены так, как показано ниже. запрещается использовать переменные, не описанные ниже, но разрешается не использовать часть из описанных. const n=2016; var a: array [1..n] of integer; i, m, k: integer; begin for i: =1 to n do readln(a[i]); … end. в качестве ответа вам необходимо фрагмент программы, который должен находиться на месте многоточия. в этом случае вы должны использовать те же самые исходные данные и переменные, какие были предложены в условии.

akalitp08ipr akalitp08ipr    3   23.08.2019 13:50    2

Ответы
Elv26 Elv26  05.10.2020 14:48
Const N=2016; 
var 
a: array [1..N] of integer;
i, m, k: integer;
begin
for i:=1 to N do a[i]:=random(1000)+1;
//readln(a[i]); 
m:=0;
for i:=1 to N do
 if (a[i]>=8*8*8)and(a[i] mod 8 = 4)and(a[i]>m)
  then m:=a[i]; 
writeln('m = ',m);
end.

Пример:
m = 996
ПОКАЗАТЬ ОТВЕТЫ
назик31 назик31  05.10.2020 14:48
Const
  N=2016;
var
  a: array [1..N] of integer;
  i, m, k: integer;
begin
  for i:=1 to N do
    readln(a[i]);
  k:=0;
  for i:=1 to N do begin
    m:=a[i]-516;
    if m>=0 then begin
      if m mod 8=0 then begin
        m:=m div 8;
        if (m - m mod 8) mod 8 = 0 then
          if a[i]>k then k:=a[i]
        end
      end
    end;
  Writeln(k)
end.

Объяснения
Число 1000₁₀ = 1750₈, а минимальное четырехзначное восьмеричное число - это 1000₈ = 512₁₀.
Следовательно, искомые числа лежат на интервале [512;1000] и всегда содержат 1 в старшем разряде своего восьмеричного представления.
Вычтем из исходного числа 512 и тогда можно рассматривать только трехзначные восьмеричные числа.
Трехзначное восьмеричное число в расширенной записи имеет вид
N=abc₈ = (a×8²+b×8¹+c)₁₀ = 64a+8b+c.
По условию с=4, поскольку число должно оканчиваться на 4 в своем восьмеричном представлении.
Мы получили соотношение N-4 = 64a+8b = 8(8a+b), т.е. N-4 должно быть кратно 8. Итак, первый шаг - получить a[i]-516 и если оно не отрицательно, проверить нулевой остаток от деления этой величины на 8. Если это так, полагаем m=(a[i]-4) div 8.
Рассматриваем уравнение m=8a+b. a=(m-b)/8. Понятно, что m-b>0 и a должно быть кратно 8. Что и следует проверить. Если все так и есть - число подходит и следует обычная проверка алгоритма поиска максимума.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика