Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2015, 13:06   #1
nnkorol
Пользователь
 
Регистрация: 29.04.2015
Сообщений: 11
По умолчанию Составление всевозможных комбинаций из цифр

Набросал такую програмку
var
i1, i2, i3: integer;
begin
for i1:=1 to 4 do
for i2:=1 to 4 do
for i3:=1 to 4 do

if ((i1<>i2)and(i1<>i3)and(i2<>i3)and( i3<>i1))then
writeln(i1,-i2,-i3);
end.

Результат
1-2-3
1-2-4
1-3-2
1-3-4
1-4-2
1-4-3
2-1-3
2-1-4
2-3-1
2-3-4
2-4-1
2-4-3
3-1-2
3-1-4
3-2-1
3-2-4
3-4-1
3-4-2
4-1-2
4-1-3
4-2-1
4-2-3
4-3-1
4-3-2

Подскажите как убрать повторяющиеся комбинации например 1-2-3 1-3-2 3-2-1 3-1-2??
nnkorol вне форума Ответить с цитированием
Старый 07.07.2015, 13:09   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

ну если я правильно понял, что новый цикл считайте от предыдущего индекса, а не от 1 всегда
p51x вне форума Ответить с цитированием
Старый 07.07.2015, 13:12   #3
nnkorol
Пользователь
 
Регистрация: 29.04.2015
Сообщений: 11
По умолчанию

Расскажу что мне нужно. Надо составить всевозможные комбинации из 4 цифр без повторяющихся комбинаций
nnkorol вне форума Ответить с цитированием
Старый 07.07.2015, 13:12   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так там же останется всего нечего!!

Код:
var
  i1, i2, i3: integer;
begin
 for i1:=1 to 4 do
  for i2:=i1+1 to 4 do
    for i3:=i2+1 to 4 do
       writeln(i1,-i2,-i3);
end.
в результате будет это:
Код:
1-2-3
1-2-4
1-3-4
2-3-4

Последний раз редактировалось Serge_Bliznykov; 07.07.2015 в 13:15.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2015, 13:24   #5
nnkorol
Пользователь
 
Регистрация: 29.04.2015
Сообщений: 11
По умолчанию

а если побольше взять цифр??
var
i1, i2, i3, i4, i5, i6, i7: integer;
begin
for i1:=1 to 10 do
for i2:=1 to 10 do
for i3:=1 to 10 do
for i4:=1 to 10 do
for i5:=1 to 10 do
for i6:=1 to 10 do
for i7:=1 to 10 do
writeln(i1, i2, i3, i4, i5, i6, i7);
end.
nnkorol вне форума Ответить с цитированием
Старый 07.07.2015, 13:33   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну возьмите побольше, кто Вам запрещает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2015, 13:36   #7
nnkorol
Пользователь
 
Регистрация: 29.04.2015
Сообщений: 11
По умолчанию

а как реализовать, чтоб комбинации не повторялись?
nnkorol вне форума Ответить с цитированием
Старый 07.07.2015, 13:39   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а пример выше я для чего написал, для красоты?!

Вам нужны Сочетания? (см. Комбинаторика — Сочетания или Википедия - Сочетания)

например, для 3-х цифр:
допустима комбинация 1-1-1 ?
или только 1-2-3 и т.д. ?

Последний раз редактировалось Serge_Bliznykov; 07.07.2015 в 13:42.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 07.07.2015, 13:46   #9
nnkorol
Пользователь
 
Регистрация: 29.04.2015
Сообщений: 11
По умолчанию

только 1-2-3 и т.д. В одной комбинации цифры между собой не повторяются
nnkorol вне форума Ответить с цитированием
Старый 07.07.2015, 13:50   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ясно. Вам нужны "Сочетания без повторений"

либо берите свой код, только каждый цикл начинайте от предыдущий +1 (
Код:
for i1:=1 to 9 do
  for i2:=i1+1 to 9 do
    for i3:=i2+1 to 9 do
.....

либо возьмите ХОРОШИЙ готовый УНИВЕРСАЛЬНЫЙ код можно взять тут
Цитата:
Помогите с алгоритмом поиска все сочетаний из n по k без повторений.
Код:
var
    i,p,k,n,m: integer;
    A: array [1..100] of integer;
begin
    readln(k,n);
    {генерация первого подмножества}
    for i := 1 to k do
        A[i]:=i;

    p:=k;
    while p>=1 do
    begin
        {вывод подмножества на экран}
        for m := 1 to k do
            write(A[m],' ');
            writeln;

        if A[k]=n then
            p:=p-1
        else
            p:=k;

        if p>=1 then
            for i := k downto p do
                A[i]:=A[p]+i-p+1;
    end;
end.

Последний раз редактировалось Serge_Bliznykov; 07.07.2015 в 13:52.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
получение всевозможных комбинаций из матрицы по столбцам matritsa Помощь студентам 4 16.10.2012 17:47
Перебор комбинаций KobolD Помощь студентам 10 17.03.2011 12:37
Рекурсия. Перебор всевозможных вариантов элементов матрицы Mr_freeman Помощь студентам 15 02.03.2011 21:08
Вывод всевозможных перестановок символов(Си) kilgoreq Помощь студентам 2 18.11.2010 21:28
Генерация всевозможных состояний массива MoroZzz45 Общие вопросы C/C++ 7 06.06.2010 22:32