rechkai64
?>

Дан массив целых чисел a[1..8]. найти количество отрицательных элементов массива. (без структуры "inc"

Информатика

Ответы

lyukiss
1 c:=0
for i:=1 to 8 do begin
if a [i]<0 then inc (c);
end;
writeln (c);
2  c:=0
for i:=1 to 8 do begin
c=c+i×i;
end;
writeln (c);
veronikagrabovskaya
1. Вопрос задан коряво. Задача эта называется сундук Билли Бонса, ряд
5,2,7,9,16,25 - это пример последовательности числа монет в сундуке, если в первый год монет пять, во второй - две.
2. Вот программка на АБС-Паскале, не оптимальная по ряду моментов, но рабочая. Из особенностей - выводит решения только если если во второй год монет становится меньше, чем в первый. Существуют решения при нулевом количестве взятых во второй год монет и при отрицательном. Если такие решения нужны - то условие в  "if (j div n) < i then" надо изменить
Программка неэффективна, вместо решения диофантова уравнения по Евклиду используется тупой перебор, но по условиям он ограничен, и его можно себе позволить.
Выводятся также все решения, если нужно одно - прерывайте цикл по нахождению первого.

program БиллиБонс;
//
const
  maxYear = 20;
  maxMoney = 32767;

var
  a, b: array [1..maxYear] of integer;
  m, n, x, y: integer;
  f1, f2: text;
  s: string;

begin
 
  assign(f1, 'input.txt');   // устанавливаем связь между файловой переменной и путем к файлу
  reset(f1);  // открытие на чтение файла
  read(f1, x);
  read(f1, y);
  close(f1); // закрываем файл
 
  // Заполняем массив коэффициентов
  a[1] := 1;b[1] := 0;
  a[2] := 0;b[2] := 1;
  for var i := 3 to maxYear do
  begin
    a[i] := a[i - 1] + a[i - 2];
    b[i] := b[i - 1] + b[i - 2];
  end;
 
  m := a[x];n := b[x];
  // решаем уравнение m*s1 + n*s2 = y
  // m,n - коэффициенты, зависящие от номера года
  // s1,s2 - монет в первый и второй годы
 
  assign(f2, 'output.txt');   // устанавливаем связь между файловой переменной и путем к файлу
  rewrite(f2);  // создание (перезапись) файла
 
  for var i := 1 to y div m do
  // цикл по s1
  begin
    var j := y - m * i;
    if j mod n = 0 then
      if (j div n) < i then
      begin
        writeln('s1=', i, ' s2=', j div n);
        writeln(f2, i, ' ', j div n);  // вывод данных в файл
      end;
  end;
 
  close(f2); // закрываем файл
end.
dakimov

Быстрый ответ, если нету времени на чтение объяснения: АВГБ (179.134.144.44)

Объяснение:

Итак, для начала, что такое IP-адрес. Это строка вида X.X.X.X, где каждое число X лежит в диапазоне [0, 255], потому что только такие числа могут поместиться в одном байте. Очевидно, что X не может быть четырёхзначным числом. Это нам потом пригодится.

Для начала сделаем вывод, что кусочек Б должен идти последним, потому что с него ничего не может начинаться (4417 > 255; 449 > 255; 444 > 255), т.е. какая бы буква не шла после Б, мы не получим число, меньшее либо равное 255, а значит Б должно идти последним.

Далее, можно заметить, что третьим по счёту обязательно должен идти кусочек Г, потому что он заканчивается на трёхзначное число 144, т.е. после него обязательно должна сразу идти точка (ибо если её не будет, то получится четырёхзначное или ещё большее число), а точка у нас есть только в начале кусочка Б, который идёт четвёртым. Поэтому Г - третий по счёту кусочек.

Далее, остались кусочки А и В. Кусочек В не может идти перед кусочком А хотя бы потому, что тогда они образуют между собой число 1317, которое является четырёхзначным и выходит за диапазон [0, 255], а следовательно, сначала идёт кусочек А (первым), а за ним кусочек В (вторым), тогда всё будет в порядке.

Итого, имеем последовательность: АВГБ. Она соответствует следующему IP-адресу: 179.134.144.44

В этом IP-адресе все четыре числа действительно лежат в диапазоне [0, 255], а значит этот IP-адрес корректен, что ещё раз подтверждает правильность наших рассуждений.

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

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

Дан массив целых чисел a[1..8]. найти количество отрицательных элементов массива. (без структуры "inc"
Ваше имя (никнейм)*
Email*
Комментарий*