Cod sursa(job #1458170)

Utilizator aimrdlAndrei mrdl aimrdl Data 7 iulie 2015 02:52:40
Problema Generare de permutari Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

int n;
int v[8];

inline void swap (int &a, int &b) {
	int c = a;
	a = b;
	b = c;
}

inline int next () {
	int i, found = 0;
	for (i = n - 2; i >= 0; --i) {
		if (v[i] < v[i+1]) {
			found = 1;
			break;
		}
	}
	
	if (!found) return 0;
	
	int a = i; //swap index 1
	
	for (i = n - 1; i >= 0; --i) {
		if (v[i] > v[a]) break;
	}
	
	int b = i; //swap index 2
	
	swap (v[a], v[b]);
	
	int j;
	for (i = a + 1, j = 1; i <= n/2; ++i, ++j) {
		swap (v[i], v[n-j]);
	}
	
	return 1;
}
		
int main (void) {
	freopen("permutari.in", "r", stdin);
	freopen("permutari.out", "w", stdout);
	
	cin >> n;
	
	for (int i = 0; i < n; ++i) {
		v[i] = i + 1;
	}
	
	do {
		for (int i = 0; i < n; ++i) {
			cout << v[i];
		}
		cout << "\n";
	} while (next());
	
	return 0;
}