Coffee3862
?>

Решить на вставку в массив. несколько тестовых наборов данных для проверки работо программы дан целочисленный линейный массив. вставить число a между всеми соседними элементами, имеющими одинаковый знак.

Информатика

Ответы

Картузов-Алексей1252
//Не самое изящное решение
//Pascal ABC.NET 3.1

Const
 n=5;

 Var ar:array[1..2*n] of integer;
 j,a,k,i,t:integer;
begin
 write('A:');
readln(a);
 writeln('Array:');
 for i:=1 to n do
 readln(ar[i]);
 j:=1;
 k:=n;
 while j<>k do
  begin
   if ((ar[j]>=0) and (ar[j+1]>=0)) or ((ar[j]<=0) and (ar[j+1]<=0)) then
   begin
    t:=ar[k];
    for i:=k-1 downto j do
     ar[i+1]:=ar[i];
    ar[j+1]:=a;
    inc(k);
    j:=j+2;
    ar[k]:=t;
   end
   else
 inc(j);
  end;
 writeln('Final array:');
 for i:=1 to k do write(ar[i]:4);
end.

Пример ввода 1:
6
1
2
3
4
5
Пример вывода 1:
1 6 2 6 3 6 4 6 5

Пример ввода 2:
6
-1
2
-3
4
-5
Пример вывода 2:
-1 2 -3 4 -5

Пример ввода 3:
6
1
2
-3
4
5
Пример вывода 3:
1 6 2 -3 4 6 5
Lapushkin1988
Будем считать, что появление символов равновероятно.
Первое сообщение содержит х символов, тогда второе сообщение содержит 2,5х символов.
Т. к. количество информации (I), которое содержит сообщение, закодированное с знаковой системы, равно количеству информации, которое несет один символ (i), умноженному на число символов в сообщении, то:
I = x*i1
I = 2,5x*i2
А т. к. количество информации у нас одинаково, то:
x*i1 = 2,5x*i2
i1 = 2,5*i2
2*i1 = 5*i2
А т. к. нам известно, что мощность каждого алфавита не превышает 32, то количество информации, которое несет один символ (i) вычисляется по фомуле: i <= log2(32). Т. к. на каждый символ приходится целое число битов, то i может принимать значения 1, 2, 3, 4, 5 битов.
Подставляя эти значения в формулу соответствия между количеством информации, приходящимся на один символ для первого и второго алфавита 2*i1 = 5*i2, находим, что i1 = 5 и i2 = 2.
Следовательно, мощность первого алфавита равна 2^5 = 32 символа, а второго алфавита равна 2^2 = 4 символа.
Константин
// PascalABC.NET 3.3, сборка 1547 от 07.10.2017
// Внимание! Если программа не работает, обновите версию!

begin
  var n:=ReadInteger('Количество строк/столбцов в матрице:');
  Writeln('*** Исходная матрица ***');
  var a:=MatrRandom(n,n,-99,99);
  a.Println(4); Writeln(4*a.ColCount*'-');
  var (s,p):=(0,BigInteger(1));
  for var i:=0 to n-1 do
    if (a[i,i]>0) and (a[i,i].IsEven) then s+=a[i,i]
    else
      if a[i,n-1-i].IsOdd then p*=a[i,n-i-1];
  Writeln(s*p)
end.

Пример
Количество строк/столбцов в матрице: 13
*** Исходная матрица ***
   1 -62  88  54  98 -68 -10 -69  39 -69 -83  32 -31
 -55 -57  51 -44 -15  -5   6  83  42  -9 -27  11  22
  -4 -61  -4  -7  -9  50  20  67  94 -57  24 -51  -1
  21  40 -21 -87 -17  62  61  52 -19  23 -66  45  41
 -93 -84 -82  58  47  16 -57 -23  35 -49  35 -54  40
 -33 -87   1 -49  99 -73 -92  85  73  65   5  30 -92
  10  50  69 -85  16 -38  48  49  44   5  50 -64  -5
 -92 -94 -78  85 -11  43  66  43  -4  49 -49 -70  23
 -93  38  55 -67 -50  13 -71  39 -93  -8   8  21  35
 -26  -2  90  22   8  51 -84   5 -81 -98  64  88 -24
  62  63 -35 -86 -98  18  85  92 -45 -89  94  11 -45
 -63 -92  55 -98  14  14 -35  54 -30 -31  53  74 -59
  -1 -85 -81  87  36  91 -55  74  51 -34 -25  93  -9

216716207400

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

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

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

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

damir
irohmichaelchikaodiri
Nikolaevich1534
gorushko-tabak3
lalaland2744
Овчинников_Грузман
bal4shovser16
vetviptime
RozaAsadullina
lechocolat
urazmetova
Zladthesecond577
Александровна-Васильевна
delta88
es196