powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перестановки
9 сообщений из 9, страница 1 из 1
Перестановки
    #36426861
Obsess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть следующий алгоритм:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
program PerestanovkiRecursion;
	  type Pere=array [byte] of integer;
	  var N,i,j:integer;
	      X:Pere;
	  procedure Generate(k:integer);
	    var i,j:byte;
	    procedure Swap(var a,b:integer);
	      var c:integer;
	    begin c:=a;a:=b;b:=c end;
	  begin
	    if k=N then
	      begin for i:= 1  to N do write(X[i]);writeln end
	    else
	      for j:=k+ 1  to N do
		begin
{      writeln('X[k+1] = ',X[k+ 1 ],' k+1=',k+ 1 );
      writeln('X[j] = ',X[j],' j=',j);
      readln;
 }
 	  Swap(X[k+ 1 ],X[j]);
	   Generate(k+ 1 );
		  Swap(X[k+ 1 ],X[j])
		end
	  end;
	begin
	  write('N=');readln(N);
    X[ 1 ]:= 1 ;X[ 2 ]:= 0 ; X[ 3 ]:= 0 ;x[ 4 ]:= 0 ;
	  { for i:= 1  to N do X[i]:=i;}
	  Generate( 0 );
    readln;
	end.
Работает так. Вводим два числа: 1, 2.
Перестановки выглядят так: 12, 21.
Объясните как сделать так: если вводятся одинаковые числа - по ним перестановки не будет, т.е. вводим: 1, 1.
На выходе только :11.
...
Рейтинг: 0 / 0
Перестановки
    #36426973
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отсортировать и пропустить через uniq
...
Рейтинг: 0 / 0
Перестановки
    #36426997
Vowk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tchingizотсортировать и пропустить через uniq
Ну да, только не перестановки сами, а массив исходных значений X.
...
Рейтинг: 0 / 0
Перестановки
    #36427049
Obsess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vowktchingizотсортировать и пропустить через uniq
Ну да, только не перестановки сами, а массив исходных значений X.
Это задание нужно сделать на Pascal.
Для С++ функция unique() удаляет все последовательные дубликаты из списка.
Т.е. 1223 должен принять вид 123.
Ну тогда на выходе получится 6 различных значений.
Тогда как при 1223 получается 18!
...
Рейтинг: 0 / 0
Перестановки
    #36427052
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пусть есть 1штрих и 1дваштриха.
на выходе получаем список из 2х перестановок
1штрих, 1дваштриха
1дваштриха, 1штрих

поскольку для внешнего наблюдателя и uniq 1штрих не отличим от 1дваштриха
он оставит одну из перестановок
...
Рейтинг: 0 / 0
Перестановки
    #36427075
Obsess
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tchingizпусть есть 1штрих и 1дваштриха.
на выходе получаем список из 2х перестановок
1штрих, 1дваштриха
1дваштриха, 1штрих

поскольку для внешнего наблюдателя и uniq 1штрих не отличим от 1дваштриха
он оставит одну из перестановок
Как я понял:
Перестановка 1,2,2 будет выполнена полностью, т.е. все 6 значений, но
uniq оставит только: 122, 212, 221.
Но это очень плохо. Ведь перестановка для 10-значного числа, содержащего 2 разные цифры, должна выполниться 10 раз. Например, 000000001.......1000000000.
А при предложенном варианте на экран выводится 10 различных значений, но перестановка будет выполняться все 10!(факториал) раз.
...
Рейтинг: 0 / 0
Перестановки
    #36427104
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Obsess
Но это очень плохо.

это не хорошо и не плохо, это выполнение требований тз.
автор
Объясните как сделать так: если вводятся одинаковые числа - по ним перестановки не будет, т.е. вводим: 1, 1.
На выходе только :11.
в вопросе требований к эффективности не было.

след вариант см Vowk
удалить дубликаты во входной последовательности цифр -
и в каждой выходной перестановке восстановить дубликаты.
...
Рейтинг: 0 / 0
Перестановки
    #36427532
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Obsess
Работает так. Вводим два числа: 1, 2.
Перестановки выглядят так: 12, 21.
Объясните как сделать так: если вводятся одинаковые числа - по ним перестановки не будет, т.е. вводим: 1, 1.
На выходе только :11.
Уточни задание у преподавателя. Перестановки имеет смысл делать для УНИКАЛЬНЫХ элементов множества. Если мы имеем МУЛЬТИМНОЖЕСТВО то надо дать смысл повторениям 11, 11 в множестве {1,1}.
...
Рейтинг: 0 / 0
Перестановки
    #36428511
Crazzy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор, то, что тебе нужно это не перестановки, а сочетания
тынц
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Перестановки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]