if (Int64.TryParse(textBox3.Text, out k) && k >= 1 && k <= Factorials[N - 1])
{
bool[] used = new bool[N];
for (int i = 0; i < N; i++)
used[i] = false;
int[] a = new int[N];
k--;
for (int i = 0; i < N - 1; i++)
{
int x = Convert.ToInt32(k / Factorials[N - 2 - i]);
k %= Factorials[N - 2 - i];
int count = -1, j = 0;
for ( ; count != x; j++) //пока не отсчитаем х
if (!used[j]) count++; //считаем неиспользованные числа
a[i] = j;
used[j-1] = true;
}
for (int i = 0; i < N; i++)
if (!used[i])
{
a[N - 1] = i + 1;
}
string s = GetString (a);
textBox4.Text = s;
}
else
{
textBox3.Text = "";
var result = MessageBox.Show("Номер перестановки - натуральное число 1 <= k <= N!",
"Ошибка ввода k",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
else
{
textBox2.Text = "";
var result = MessageBox.Show("Порядок группы перестановок - натуральное число N >= 1",
"Ошибка ввода N",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
//-------------------------------------------------------------------------------------- получение номера по перестановке
private void button3_Click(object sender, EventArgs e)
{
string s = textBox5.Text;
string[] words = s.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries);