add task_001
This commit is contained in:
@@ -1,10 +1,41 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
|
||||
namespace alg::tasks
|
||||
{
|
||||
// Есть набор чисел, необходимо из них создать такую перестановку
|
||||
// при котором разности их величин будутминимально отличаться.
|
||||
// Т.е. как бы максимально их уравнять
|
||||
inline void run()
|
||||
{
|
||||
// { x, y }
|
||||
// x - число
|
||||
// y - просто номер чтоб не потеряться когда увидим перестановку
|
||||
std::vector<std::pair<int, int>> data { { 1, 0 }, { 2, 1 }, { 3, 2 }, { 4, 3 } };
|
||||
|
||||
std::sort(data.begin(), data.end());
|
||||
auto n = data.size();
|
||||
|
||||
// работа такая
|
||||
// берем четные в порядке возрастания
|
||||
for (std::size_t i = 0; i < n; i += 2)
|
||||
std::cout << data[i].second << ' ';
|
||||
|
||||
// потом нечетные в порядке убывания
|
||||
for (int i = n - 1- n % 2; i >= 1; i -=2)
|
||||
std::cout << data[i].second << ' ';
|
||||
std::cout << std::endl;
|
||||
|
||||
// циферки выводим
|
||||
for (std::size_t i = 0; i < n; i += 2)
|
||||
std::cout << data[i].first << ' ';
|
||||
|
||||
for (int i = n - 1- n % 2; i >= 1; i -=2)
|
||||
std::cout << data[i].first << ' ';
|
||||
std::cout << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user