Лексикографический порядок чисел на паскале - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

Здравствуйте!!! Помогите мне пожалуиста. Напишите программу которая расставляет числа в лексикографическом порядке. Входные данные производятся через одномерный массив. Пример: Входные данные- 2 10 11 12 20 21 22 100 101 102 110. Исход после выполнения программы- 10 100 101 102 11 110 12 2 20 21 22. ПЛЗ помогите.

Решение задачи: «Лексикографический порядок чисел на паскале»

textual
Листинг программы
var
M,L:array[1..1000000] of integer;
X:array[1..1000] of string;
n,i,b,a,j,h,f,z,s,c,k,summa:integer;
ss:string;
begin
read(a,b);
{запись чисел от а до б}
for i:=a to b do
M[i]:=i;
{запись чисел в троичную систему счисления}
for i:=a to b do
begin
if i<=2 then
M[i]:=i
else
begin
n:=i*1;
j:=0;
while n>2 do
begin
L[j+1]:=n mod 3;
n:=n div 3;
j:=j+1;
end;
s:=j;
for j:=1 to (s div 2) do
begin
f:=L[j];
L[j]:=L[s-j+1];
L[s-j+1]:=f;
end;
z:=1;
h:=0;
for j:=s downto 1 do
begin
h:=h+(z*L[j]);
z:=z*10;
end;
h:=h+(n*z);
M[i]:=h;
end;
{переход полученных чисел в тип string}
end;
for i:=a to b do
str(M[i],X[i]);
{расположение их лексикографическом порядке}
for i:=a to b-1 do
for j:=i+1 to b do
if X[i]>X[j] then
begin
ss:=X[i];
X[i]:=X[j];
X[j]:=ss;
end;
{переход полученной последовательности в численный тип}
for i:=a to b do
val(X[i],M[i],c);
{переход первого числа получившейся последовательности в десятичную систему}
f:=1;
summa:=0;
h:=1;
z:=1;
n:=1*M[a];
while n>=10 do
begin
n:=n div 10;
z:=z+1;
end;
for i:=1 to z-1 do
begin
f:=f*10;
h:=h*3;
end;
k:=f*1;
n:=1*M[a];
for i:=z downto 2 do
begin
summa:=summa+((n div f) mod f)*h;
f:=f div 10;
h:=h div 3;
end;
if ((n mod k)=1) or (z=1) then
summa:=summa+1;
if (n mod k)=2 then
summa:=summa+2;
{вывод этого числа на экран}
write(summa);
writeln;
end.

Объяснение кода листинга программы

  1. Создаются два массива: M и X. M содержит числа, которые записываются в троичную систему счисления, а X содержит строки этих чисел в лексикографическом порядке.
  2. Числа из массива M записываются в массив X.
  3. Строки чисел в массиве X сортируются в лексикографическом порядке.
  4. Первое число из отсортированной последовательности в массиве X преобразуется в десятичную систему счисления и присваивается переменной c.
  5. Вычисляется сумма всех чисел в массиве X, начиная с первого числа и до последнего, с использованием переменной summa.
  6. Если последнее число в массиве X является нечетным числом, то к сумме добавляется единица.
  7. Результат выводится на экран с помощью функции write.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы