М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Jirnyi
Jirnyi
16.06.2020 06:36 •  Информатика

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

👇
Ответ:
ivanchistyakov
ivanchistyakov
16.06.2020

Решение с использованием указателей:

#include <iostream>

#include <ctime>

#define N 15

int main()  

{

   int A[N];

   int i, tmp, cnt;

   int *min = A,*max = A, *j;

   setlocale(LC_ALL, "Russian");

   // Автозаполнение

   srand(time(0));

   for (i = 0; i < N; i++)

       A[i] = rand() % 201 - 100;

   std::cout << "Исходный массив:" << std::endl;

   for (i = 0; i < N; i++)

       std::cout << *(A + i) << " ";

   // Находим минимальный и максимальный элементы массива, запоминаем их адреса

   for (i = 0; i < N; i++)

   {

       if (*(A + i) > *max) max = A + i;

       if (*(A + i) < *min) min = A + i;

   }

   // Мин. и макс. элементы могут находиться в разных местах относительно друг друга

   if (min < max)

   {

       cnt = ((max) - (min)) / 2;

       for (j = min + 1, i = 0; i < cnt; j++, i++)

       {

           tmp = *j;

           *j = *(min + 1 + (max - 1 - j));

           *(min + 1 + (max - 1 - j)) = tmp;

       }

   }

   else

   {

       cnt = ((min) - (max)) / 2;

       for (j = max + 1, i = 0; i < cnt; j++, i++)

       {

           tmp = *j;

           *j = *(max + 1 + (min - 1 - j));

           *(max + 1 + (min - 1 - j)) = tmp;

       }

   }

   std::cout << "\nРезультат:" << std::endl;

   for (i = 0; i < N; i++)

       std::cout << *(A + i) << " ";

   return 0;

}

4,6(16 оценок)
Открыть все ответы
Ответ:
Profesor2Max
Profesor2Max
16.06.2020
// PascalABC.NET 3.0, сборка 1156 от 30.01.2016
function Avg(a:array[,] of integer):real;
begin
  var s:=0; var k:=0;
  foreach var e:integer in a do
    if e>0 then begin s+=e; Inc(k) end;
  if k>0 then Result:=s/k else Result:=1e-100;
end;

begin
  var A:=MatrixRandom(4,4,-50,50); Writeln(A);
  Writeln('Среднее арифметическое положительных равно ',Avg(A):0:3);
  var B:=MatrixRandom(5,5,-30,30); Writeln(B);
  Writeln('Среднее арифметическое положительных равно ',Avg(B):0:3);
  var C:=MatrixRandom(4,5,-25,38); Writeln(C);
  Writeln('Среднее арифметическое положительных равно ',Avg(C):0:3);
end.

Тестовое решение:
[[35,35,5,-47],[14,34,35,-13],[25,-5,35,-29],[-7,10,-12,12]]
Среднее арифметическое положительных равно 24.000
[[-12,-17,-10,19,14],[20,17,-27,-2,16],[-3,-21,30,2,10],[5,-3,-17,-3,18],[0,-26,29,1,-22]]
Среднее арифметическое положительных равно 15.083
[[-5,-11,17,-4,15],[15,17,-24,36,15],[-8,-3,-22,28,-25],[-21,6,12,31,-1]]
Среднее арифметическое положительных равно 19.200
4,8(3 оценок)
Ответ:
853692
853692
16.06.2020
В начале в строке находилось 333 троек по 8 плюс одна 8, всего 1000 восьмерок.
1. При выполнения цикла каждая из троек 8 будет заменена на одну 9. Значит у нас получится строка длиной в 334 символа, где 333 девятки и последний символ - восьмерка
2. Далее 333 девятки заменятся на 111 восьмерок плюс последняя восьмерка - всего получим 112 восьмерок
3. Из 112 восьмерок получится 37 девяток и одна восьмерка
4. И 37 девяток получим 12 восьмерок плюс одна девятка и плюс последняя восьмерка
5. 12 восьмерок дадут 4 девятки плюс последние 9 и 8
6. И наконец получаем строку 8998
ответ: 8998
4,7(33 оценок)
Новые ответы от MOGZ: Информатика
Полный доступ к MOGZ
Живи умнее Безлимитный доступ к MOGZ Оформи подписку
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ