// InvertTable.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <string> // библиотека классов для работы с типом строка
#include <iostream>

using namespace std; // работы с консолью ввода и вывода

int _tmain(int argc, _TCHAR* argv[])
{
	cout << "vvedite kol-vo chisel v tablice inversij: " ; // вывода на экран
	int kol = 0; // переменная для учета количества элементов в массиве
	cin >> kol; // ввод с клавиатуры количества чисел в матрице инверсий
	cout << "Vvedite cherez probel tablicy inversij: "; // вывод на экран
	int *mas_in; // создание указателя для динамического массива
	mas_in = new int(kol); // создание динамического массива размера kol
	for (int i=0;i<kol;i++) // цикл для ввода элементов динамического массива
		cin >> mas_in[i]; // ввод с клавиатуры i элемента
	cout << "Tablica inversij: "; // вывод на экран
	for (int i=0;i<kol;i++) //цикл для вывода динамического массива инверсий
		cout << mas_in[i]; // вывод i элемента
		cout << endl;	// вывод с новой строки
	string strP = ""; // строка выходная
	char chislo[2];	// для преобразования из числа в строку
	for (int i=0;i<kol;i++) // цикл перебора всех элементов матрицы инверсий
	// для последовательности 1 ... 9 , начинаем с 9
		if (mas_in[kol-i-1] == 0) // если элемент матрицы инверсий равен 0, то сдвигаем влево
			strP = itoa(kol-i,chislo,10) + strP; // переводим в строку номер порядковый kol-i и прибавляем всю остальную строку
		else // если элемент матрицы инверсий не нулевой, то на n позиций надо передвинуть число в право от начала строки
			if (strP.length() > mas_in[kol-i-1]) // если длина выходной строки больше, то мы может вставить внутрь строки число
				strP.insert(mas_in[kol-i-1],itoa(kol-i,chislo,10));	//вставляем в строку на mas_in[kol-i-1] вправо
			else
				strP += itoa(kol-i,chislo,10); // иначе просто прибавляем к концу строки
	cout << "Tablica perestanovok: " << strP << endl;	// выводим нашу строку, в которой подряд идет последовательность перестановок
	system("PAUSE");
	return 0;
}
