Дан массив целых чисел (n=15), заполненный случайным образом числами из промежутка [-20,50]. − удалить из него все элементы, в которых есть цифра 5. − вставить число k после всех элементов, кратных своему номеру (k вводить с клавиатуры). − поменять местами первый положительный и последний отрицательный элементы. на паскале)
155
455
Ответы на вопрос:
Const n = 15; flag = 111; type mas = array[1..n] of integer; procedure shiftleft(var a: mas; npos: integer); // элементы массива a, начиная с номера npos, сдвигаются на один к началу массива // последний элемент массива заносится значением 111 var i: integer; begin for i : = npos to n - 1 do a[i] : = a[i + 1]; a[n] : = flag end; procedure shiftright(var a: mas; npos: integer); // элементы массива a, начиная с номера npos, сдвигаются на один к концу массива // последний элемент массива теряется, элемент с номером npos заносится значением 111 var i: integer; begin for i : = n downto npos + 1 do a[i] : = a[i - 1]; a[npos] : = flag end; function contains5(p: integer): boolean; // возвращает true, если в числе p есть хоть одна цифра 5 // возвращает false в противном случае var s: string; begin str(p, s); contains5 : = (pos('5', s) > 0) end; procedure deleteall5(var a: mas); // удаляет из массива а все элементы, содержащие цифру 5 var i, j: integer; begin i : = 1; // текущая позиция в массиве j : = n; // количество непросмотренных элементов while j > 0 do begin if contains5(a[i]) then shiftleft(a, i) else i : = i + 1; j : = j - 1 end; end; function fold(var a: mas; pstart: integer): integer; // возвращает номер элемента в массиве а, значение которого кратно его номеру // pstart - номер элемента, с которого начинается просмотр // если такого элемента не найдено, возвращается ноль. var i: integer; begin for i : = pstart to n do if a[i] mod i = 0 then begin fold : = i; exit end; fold : = 0 end; procedure insertk(var a: mas; k: integer); // после всех элементов массива, кратных своему номеру, // вставляет значение k, сдвигая оставшиеся элементы // к концу массива var i, j: integer; begin i : = 1; while i < = n do begin j : = fold(a, i); if j > 0 then begin shiftright(a, j); a[j] : = k; i : = j + 1 end else i : = n + 1 end end; function getfirstpos(var a: mas): integer; // возвращает номер первого положительного элемента в массиве а // возвращает ноль, если таких элементов нет. var i: integer; begin i: =1; while i < = n do begin if a[i] > 0 then begin getfirstpos : = i; exit end else i : = i + 1 end; getfirstpos : = 0 end; function getlastneg(var a: mas): integer; // возвращает номер последнего по порядку отрицательного элемента в массиве а // возвращает ноль, если таких элементов нет. var i: integer; begin i: =n; while i > = 1 do begin if a[i] < 0 then begin getlastneg : = i; exit end else i : = i - 1 end; getlastneg : = 0 end; procedure swap(var a: mas; p: integer; q: integer); // обмен местами элементов массива a[p] и a[q] var s: integer; begin s : = a[p]; a[p] : = a[q]; a[q] : = s end; var m: mas; k, i, j: integer; begin // инициализация массива randomize; writeln('исходный массив'); for i : = 1 to n do begin m[i] : = random(70) - 20; write(m[i]: 4) end; writeln; deleteall5(m); // удаление элементов, содержащих цифру 5 writeln('после удаления элементов, содержащих цифру 5'); for i : = 1 to n do write(m[i]: 4); writeln; writeln('введите значение k'); readln(k); insertk(m, k); writeln('после вставки значения k'); for i : = 1 to n do write(m[i]: 4); writeln; i : = getfirstpos(m); if i > 0 then begin j : = getlastneg(m); if j > 0 then begin swap(m, i, j); writeln('после обмена местами пары элементов'); for i : = 1 to n do write(m[i]: 4); writeln; end end end. тестовое решение: исходный массив -2 -5 43 12 13 5 -7 9 27 5 47 45 28 34 21 после удаления элементов, содержащих цифру 5 -2 43 12 13 -7 9 27 47 28 34 21 111 111 111 111 введите значение k 222 после вставки значения k 222 222 -2 43 12 13 222 -7 222 9 27 47 28 34 21 после обмена местами пары элементов -7 222 -2 43 12 13 222 222 222 9 27 47 28 34 21
Деление до конца без штрафов возможно, если количество орехов в кучке будет какой-либо степенью двойки (2, 4, 8, 16, 32, 64, 128, 256, 512). число 577 - нечетно, следовательно, его можно представить < четное> +< нечетное> . при делении 576+1 получим первый штраф. число 576 не является степенью двойки, поэтому необходимо опять поделить орехи на неравные кучки: 512+64 (второй штраф). 512 и 64 - степени двойки, значит дальнейшее разделение можно выполнить без штрафов. можно делить, например, так: 1. 512 и 65 орехов (штраф 1 рубль) 2. 65 делим на 2 кучки: 64 и 1 (штраф 1 рубль) 3 и все следующие операции: кучки из 512 и 64 орехов делим на равные кучки (512: 256 и 256, 256: 128 и 128; 64: 32 и 32, 32: 16 и 16 и т. получаем, что минимальная сумма штрафа = 2 рубля.
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Karina071402.03.2022 16:35
-
Melentii28.05.2020 19:27
-
XxXRePlayXxX11.06.2022 23:58
-
Shadow69moon29.12.2020 09:15
-
Nukaka9l08.01.2021 20:47
-
НеПøтêpяHHåя06.01.2022 23:37
-
Olka190920.03.2022 15:24
-
suv161215.03.2021 04:47
-
плюскваммиперфекти24.03.2020 00:10
-
владимир18202.02.2020 00:01
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.