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

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

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

 
 Ответить  Открыть новую тему 
> Задача О ПОДСТАНОВКАХ
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


КАК БЕЗ РЕКУРСИИ ВЫВЕСТИ НА ЭКРАН ВСЕ ПОДСТАНОВКИ ИЗ N ЭЛЕМЕНТО В ПОРЯДКЕ УБЫВАНИЯ ЧИСЛА??
пРИМЕР ВХОД ДАННЫХ
3
вЫХОД:
321
312
231
213
132
123
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






K Y S K A
Цитата(Правила форума)
6. Стиль сообщений

НЕ ПИШИТЕ В БОЛЬШОМ РЕГИСТРЕ! ЭТО РАСЦЕНИВАЕТСЯ КАК КРИК!! ВАМ НРАВИТЬСЯ КОГДА НА ВАС КРИЧАТ ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


иЗВИНИТЕ ПОЖАЛУЙСТА!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


Ой кэпс лук был включен, извините пожалуйста...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






K Y S K A,
тебе нужно в порядке убывания... А что, генерировать в порядке возрастания, запоминать в массиве, а потом распечатать массив от конца к началу, никак нельзя догадаться ?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


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


Гость






Program perms;
var i,j,h,n,k:integer;
a:array[0..100] of integer; { массив для хранения перестановки }

{процедура вывода полученной перестановки}
procedure output;
var i:integer;
begin
writeln;
for i:=1 to n do write(a[i],' ');
end;

begin
readln(n); { ввод кол-ва элементов перестановки }
fillchar(a,sizeof(a),0); { инициализация массива }

{ ввод элементов начальной перестановки }
for i:=1 to n do a[i]:=i;

repeat
output; { ввод текущей перестановки }
i:=n;
while a[i-1]>a[i] do dec(i); { поиск скачка }
j:=i-1;
h:=a[j];
while a[i+1]>h do inc(i); { поиск первого меньшего элемента }
a[j]:=a[i]; a[i]:=h;
i:=j+1; k:=n;
while i<k do begin { перестановка “хвоста” }
h:=a[i]; a[i]:=a[k]; a[k]:=h;
inc(i); dec(k)
end
until j=0;
end.

И никакой рекурсии...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


Спасибо огромное, VOLVO, ты меня спас.
Чмок в щечку!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


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


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


Помогите кто-нить, а то завтра сдать надо!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Ну, я же сказал, как... Не распечатывать сразу, а сохранять в массив, а потом напечатать в обратном порядке...

Какое максимальное N у тебя может быть?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


до 6 , по крайней мере препод так обещал!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Гость






Даже при N = 7 будет работать ...
Program perms;
const
max_n = 7;
fact = 5040;

type
every = array[0 .. succ(max_n)] of byte;
res_type = array[1 .. fact] of every;

var
i,j,h,n,k:integer;
a: every;
res: res_type;
count: integer;


procedure output(a: every);
var i:integer;
begin
writeln;
for i:=1 to n do write(a[i],' ');
end;

begin
readln(n);
fillchar(a,sizeof(a),0);

for i:=1 to n do a[i]:=i;

count := 0;
repeat
inc(count); res[count] := a;
i:=n;
while a[i-1]>a[i] do dec(i);
j:=i-1;
h:=a[j];
while a[i+1]>h do inc(i);
a[j]:=a[i]; a[i]:=h;
i:=j+1; k:=n;
while i<k do begin
h:=a[i]; a[i]:=a[k]; a[k]:=h;
inc(i); dec(k)
end
until j=0;

for i := count downto 1 do
output(res[i]);
end.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


Спасибо!! СПАСИБО!!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


А мне ттут пришла в голову идея, а нельзя ли сделать та, что вводишь N и K и она тебе выводит все последовательности из "Н" элементов, каждый элемент последовательности принадлежит подмножеству натуральных чисел от 1 до К?? Интересно можно ли эту программку как-то исправить чтобы она работала так??
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






Цитата
Интересно можно ли эту программку как-то исправить чтобы она работала так?

Интересно, а зачем что-то исправлять? Есть же стандартный алгоритм "Сочетания из N по M":
Program sochets;
var
i,j,n,m: integer;
a:array[0..100] of integer;

Procedure use;
var i : integer;
begin
writeln;
for i:=1 to m do write(a[i]:3)
end;

Begin
read(n, m);
for i:=0 to m do a[i]:=i;
repeat
use;
i:=m;
while a[i]=n-m+i do dec(i);
inc(a[i]);
for j:=i+1 to m do a[j]:=a[j-1]+1;
until i=0;
end.


Только не говори, что тебе подмножества тоже нужны wink.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Пионер
**

Группа: Пользователи
Сообщений: 95
Пол: Женский
Реальное имя: Оля

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


э... не я имела ввиду с числами типа 111111 121112 131141212113125345142354213723421734157342 то есть с повторениями! поетому и спрашивала!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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