• Паскаль. Заполните массив случайными числами в интервале [100,999] и переставьте их по возрастанию
    суммы цифр.

Ответы 2

  • Спасибо! А то мучился, мучился, но ничего нормального не вышло. Постыдился даже на всеобщее обозрение выкладывать выдумки свои хд
    • Автор:

      jabari
    • 6 лет назад
    • 0
  • Непростая задача...const  n = 16;type  R = record    v: integer;    p: integer  end;  mR = array[1..n] of R;function SummOfDigits(n: integer): integer;{ Сумма цифр в трехзначном числе }begin  SummOfDigits := (n div 100) + ((n mod 100) div 10) + (n mod 10)end;procedure Swp(var a, b: R);{ Меняет местами элементы a и b }var  t: R;begin  t.v := a.v; t.p := a.p;  a.v := b.v; a.p := b.p;  b.v := t.v; b.p := t.pend;procedure Shell(var a: mR; n: integer);{ сортировка методом Шелла }var  i, j, step: integer;begin  step := n div 2;  while step > 0 do   begin    for j := n - step downto 1 do     begin      i := j;      while i <= n - step do       begin        if a[i].v > a[i + step].v then Swp(a[i], a[i + step]);        i := i + step      end    end;    step := step div 2  endend;var  a: array[1..n] of integer;  b: mR;  i: integer;begin  Randomize;  Writeln('*** Исходные элементы массива ***');  for i := 1 to n do  begin    a[i] := Random(900) + 100;    b[i].v := SummOfDigits(a[i]);    b[i].p := i;    Write(a[i]:4)  end;  Writeln;  Shell(b, n);  Writeln('*** Упорядоченные по возрастанию суммы цифр элементы массива ***');  for i := 1 to n do  begin    Write(a[b[i].p]:4)  end;  Writelnend.Тестовое решение:*** Исходные элементы массива *** 862 244 599 379 595 840 551 151 614 383 185 893 131 172 139 256*** Упорядоченные по возрастанию суммы цифр элементы массива *** 131 151 244 172 551 614 840 139 256 185 383 862 595 379 893 599
  • Добавить свой ответ

Еще вопросы

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years