IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Перестановка
сообщение
Сообщение #1


Гость






Была дана перестановка, по ней построили таблицу инверсий. надо востановить перестановку. всего N целых чисел A1, A2, ..., AN, где число Ak (0 <= Ak < N) означает,
что ровно A k элементов, больших чем k, стоит до числа k в перестановке.

М
Заголовок темы должен быть информативным ! В следующий раз удалю !
klem4

 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






gamordzhoba, пример входных данных приведи, и результат, который должен получиться при этих данных...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Из таблицы инверсий, например, 22010,
получаем исходную перестановку:
12345
35124
Если вторую строку перестановки представлять массивом В размера N , то код будет примерно такой


for i:=1 to N do B[i]:=0;
for i:=1 to N do
begin
k:=0;
j:=0;
while k<=A[i] do
begin
inc(j);
if B[j]=0 then inc(k);
end;
B[j]:=i;
end;



Подправьте, если что не так, пишу сейчас без компилятора.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






примерный


Ввод

4
2 0 1 0


Вывод

2 4 1 3
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Помоги пожалуйста, а то я с другом поспорил,что мир не без добрых людей.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


Ладно, напишу полную программу и завтра выложу, сегодня долго в инете не смогу сидеть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






gamardzhoba
Вот так вот:
const
{
n = 9;
}
n = 4;

type
arrType = array[1 .. n] of integer;

const
{
inver: arrType = (2, 3, 6, 4, 0, 2, 2, 1, 0);
}
inver: arrType = (2, 0, 1, 0);

var
i, j: integer;
perest: arrType;

begin
for i := n downto 1 do begin

move( perest[inver[i]+1], perest[inver[i]+2],
(n-(inver[i]+2)+1)*sizeof(integer) );
perest[inver[i]+1] := i;

{ Печатаем промежуточные результаты }
for j := 1 to n do
write(perest[j]:4);
writeln;

end;

{ Окончательный результат: }
for i := 1 to n do
write(perest[i]:4);
writeln;
end.


Тестировалось с закомментированными значениями тоже (пример взят из Кнута)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Прогрессор
****

Группа: Пользователи
Сообщений: 602
Пол: Мужской
Реальное имя: Михаил

Репутация: -  9  +


to gamardzhoba бери код, приведённый volvo, он эффективней, чем мой. Добавь ввод пользователем числа n, и используй динамические массивы (если что-то по ним непонятно, смотри FAQ раздела). Вывод промежуточных результатов можешь закомментировать.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Спасибо доьрые люди!!!!!!!!!!!
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.04.2024 22:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name