add task_001
This commit is contained in:
@@ -1,10 +1,41 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
#include <algorithm>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
namespace alg::tasks
|
namespace alg::tasks
|
||||||
{
|
{
|
||||||
|
// Есть набор чисел, необходимо из них создать такую перестановку
|
||||||
|
// при котором разности их величин будутминимально отличаться.
|
||||||
|
// Т.е. как бы максимально их уравнять
|
||||||
inline void run()
|
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