С++ Ровно К обменов (Сириус) 40 БАЛЛОВ
Даны два числа n и k. Вывести перестановку из n чисел (n чисел от 1 до n без повторений) такую, чтобы сортировка пузырьком по возрастанию на соответствующем массиве сделала ровно k обменов. Если возможных ответов несколько — выведите любой.
Входные данные:
Даны натуральное число n (n≤ 100) и целое неотрицательное k. Гарантируется, что для всех наборов тестовых данных решение существует.
Выходные данные:
Выведите искомую перестановку в одной строке. Числа разделяйте пробелами.
Answers & Comments
int n, k;
cin >> n >> k;
int *arr = new int[n];
for (int i = 0; i < n; ++i) { arr[i] = i + 1; }
for (int i = 1; i < n && k; ++i) {
for (int j = n - 1; j >= i && k; --j) {
int tmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = tmp;
--k;
}
}
for (int i = 0; i < n; ++i) { cout << arr[i] << ' '; }