Уровень b. напишите программу, которая заполняет массив из n = 10 элементов случайными числами в диапазоне [10,100] и сортирует его по возрастанию последней цифры числа (сначала идут все числа, которые заканчиваются на 0, потом все, которые заканчиваются на 1, и т. пример: массив: 12 10 31 40 55 63 28 87 52 92 после сортировки: 10 40 31 12 52 92 63 55 87 28 паскаль(старая версия)

Qeasdzxcrfv Qeasdzxcrfv    3   05.10.2019 10:21    170

Ответы
Ник1233211 Ник1233211  16.01.2024 22:56
Конечно, я буду рад помочь! Для решения этой задачи можно использовать алгоритм сортировки подсчётом.

Шаг 1: Создайте массив из 10 элементов.
Шаг 2: Заполните массив случайными числами в диапазоне от 10 до 100.
Шаг 3: Создайте вспомогательный массив, состоящий из 10 списков.
Шаг 4: Пройдитесь по исходному массиву и для каждого числа определите последнюю цифру (остаток от деления на 10).
Шаг 5: Добавьте текущее число в соответствующий список во вспомогательном массиве, основываясь на его последней цифре.
Шаг 6: Пройдитесь по вспомогательному массиву и объедините все списки в один отсортированный массив.
Шаг 7: Выведите отсортированный массив на экран.

Программа на языке Паскаль может выглядеть следующим образом:

program sort_by_last_digit;

const
n = 10;
min = 10;
max = 100;

type
digitList = ^list;
list = record
value: integer;
next: digitList;
end;

var
arrayToSort: array[1..n] of integer;
helperArray: array[0..9] of digitList;
sortedArray: array[1..n] of integer;
i: integer;
current: digitList;
currentIndex: integer;

function generateRandomNumber(): integer;
begin
randomize;
generateRandomNumber := random(max - min + 1) + min;
end;

procedure addToEnd(var head: digitList; number: integer);
var
newNode, cur: digitList;
begin
newNode := new(digitList);
newNode^.value := number;
newNode^.next := nil;

if head = nil then
head := newNode
else
begin
cur := head;
while cur^.next <> nil do
cur := cur^.next;

cur^.next := newNode;
end;
end;

procedure mergeLists();
var
i: integer;
cur: digitList;
begin
currentIndex := 1;

for i := 0 to 9 do
begin
cur := helperArray[i];
while cur <> nil do
begin
sortedArray[currentIndex] := cur^.value;
currentIndex := currentIndex + 1;
cur := cur^.next;
end;
end;
end;

begin
// Заполнение массива случайными числами
for i := 1 to n do
arrayToSort[i] := generateRandomNumber();

// Инициализация вспомогательного массива
for i := 0 to 9 do
helperArray[i] := nil;

// Сортировка по последней цифре исходного массива
for i := 1 to n do
addToEnd(helperArray[arrayToSort[i] mod 10], arrayToSort[i]);

// Объединение отсортированных списков
mergeLists();

// Вывод отсортированного массива
for i := 1 to n do
writeln(sortedArray[i]);
end.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика