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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2010, 20:12   #1
Cpluser
Форумчанин
 
Аватар для Cpluser
 
Регистрация: 16.02.2009
Сообщений: 555
По умолчанию перестановка без повтрорений

Нада сделать все возможные перестановки из n.
Например {1,2,3}
Перестановки: {123, 132, 213, 231, 312, 321}
Код:
{1,2,3}.
#include <iostream>
using namespace std;

int main()
{

		for(int i=1; i<4; i++)
			for(int j=1; j<4; j++)
				for(int t=1; t<4; t++)
				cout<<i<<" "<<j<<" "<<t<<endl;

	system("pause");
}
Cpluser вне форума Ответить с цитированием
Старый 10.03.2010, 20:20   #2
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Делается это рекурсией.

Код:
#include <cstdio>
#include <vector>
#include <iostream>

using namespace std;

int n;
vector <int> used,cur;

void output()
{
	for(int i = 0; i < n; i++)
		cout << cur[i];
	cout << endl;
}

void rec(int ind)
{
	if(ind == n)
		output();
	else
		for(int i = 1; i <= n; i++)
			if(!used[i - 1])
			{
				cur[ind] = i;
				used[i - 1] = 1;
				rec(ind + 1);
				used[i - 1] = 0;
			}
}

int main()
{
	cin >> n;
	used.resize(n);
	cur.resize(n);
	rec(0);
	return 0;
}
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 10.03.2010 в 20:26.
Ozerich вне форума Ответить с цитированием
Старый 10.03.2010, 20:22   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Код:
#include <iostream>
using namespace std;

int main()
{

		for(int i=1; i<4; i++)
			for(int j=1; j<4; j++)
				for(int t=1; t<4; t++)
					if((i != j) && (i != t) && (j != t))
					cout<<i<<" "<<j<<" "<<t<<endl;

	system("pause");
}
profi вне форума Ответить с цитированием
Старый 10.03.2010, 20:27   #4
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Цитата:
Сообщение от profi Посмотреть сообщение
Код:
#include <iostream>
using namespace std;

int main()
{

		for(int i=1; i<4; i++)
			for(int j=1; j<4; j++)
				for(int t=1; t<4; t++)
					if((i != j) && (i != t) && (j != t))
					cout<<i<<" "<<j<<" "<<t<<endl;

	system("pause");
}
А для n = 10 десять вложенных циклов?

p.s 700-ое сообщение
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer
Ozerich вне форума Ответить с цитированием
Старый 10.03.2010, 20:29   #5
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Цитата:
А для n = 10 десять вложенных циклов?
Та хоть 10000000000000000000000 циклов. Мне все равно. Я поправил то что спросил автор. У тебя тоже будет переполнение стека при многократном вызове твоих функций. Так, что не умничай .
profi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перестановка цифр Sanek_ntsk Общие вопросы Delphi 1 11.01.2010 00:53
Перестановка единицы RIO Общие вопросы Delphi 1 26.10.2009 15:30
Перестановка столбцов bagfinder Паскаль, Turbo Pascal, PascalABC.NET 1 25.06.2009 19:28
Сортировка и перестановка NxM Помощь студентам 4 29.05.2008 11:56
Перестановка Roman Помощь студентам 3 29.04.2007 05:37