Лексикографический порядок чисел на паскале - 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.
Объяснение кода листинга программы
- Создаются два массива: M и X. M содержит числа, которые записываются в троичную систему счисления, а X содержит строки этих чисел в лексикографическом порядке.
- Числа из массива M записываются в массив X.
- Строки чисел в массиве X сортируются в лексикографическом порядке.
- Первое число из отсортированной последовательности в массиве X преобразуется в десятичную систему счисления и присваивается переменной c.
- Вычисляется сумма всех чисел в массиве X, начиная с первого числа и до последнего, с использованием переменной summa.
- Если последнее число в массиве X является нечетным числом, то к сумме добавляется единица.
- Результат выводится на экран с помощью функции write.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д