Найдите несколько центров симметрии в массивеC++

Программы на C++. Форум разработчиков
Anonymous
Найдите несколько центров симметрии в массиве

Сообщение Anonymous »

Я пытаюсь найти в массиве несколько центров симметрии, чтобы заполнить его значениями. Я решил разделить длину на одинаковые отрезки и пройти от каждого центра в обе стороны. Здесь я сделал так, чтобы он работал для четных сегментов, но для нечетных он работает неточно: он устанавливает пары в центрах, когда нужно установить только 1. И мой OddOffset неверен в некоторых случаях (например, для 3 центров или по длине 3).

Код: Выделить всё

const double SegmentLength = static_cast(PointsCount) / SymmetryCenters;
const double HalfSegment = SegmentLength / 2;
//const auto OddOffset = std::fmod(SegmentLength, 2);

for (int32 CenterIndex = 0; CenterIndex < SymmetryCenters; CenterIndex++) {
const int32 Center = FMath::RoundToInt(CenterIndex * SegmentLength + HalfSegment);

for (int32 PointIndex = 0; PointIndex < HalfSegment; PointIndex++) {
const int32 LeftIndex = Center - PointIndex - 1;
const int32 RightIndex = Center + PointIndex;
// const int32 RightIndex = Center + PointIndex - OddOffset;

// Set values if within bounds
if (LeftIndex >= 0) OutPoints[LeftIndex] = MyValue();
if (RightIndex < PointsCount) OutPoints[RightIndex] = MyValue();
}
}
Это некоторые тестовые данные для 1 и 2 симметричных центров для разной длины массива:

Код: Выделить всё

For 06 Length: 1) [3], 2) [2, 5]
For 12 Length: 1) [6], 2) [3, 9]
For 18 Length: 1) [9], 2) [5, 14]
Также не уверен, что использование левого и правого индексов является лучшим способом, возможно, лучше использовать простой цикл 0..N - 1, нужно попробовать преобразовать.

Подробнее здесь: https://stackoverflow.com/questions/791 ... s-in-array

Вернуться в «C++»