Найдите несколько центров симметрии в массиве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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Найдите несколько центров симметрии в массиве
    Anonymous » » в форуме C++
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Удаление дубликатов списка с учетом индексов симметрии в Python
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Удаление дубликатов списка с учетом индексов симметрии в Python
    Anonymous » » в форуме Python
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous
  • Список центров SwiftUI внутри VStack
    Anonymous » » в форуме IOS
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Как сообщения отправляются конкретному пользователю после того, как они были зарегистрированы BackEnd с помощью Центров
    Anonymous » » в форуме C#
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

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