Перебирая вектор и находя максимальную сумму значений с фиксированным числом индексов - PullRequest
0 голосов
/ 11 мая 2018

Мне нужно:

  1. Перебрать массив из восьми значений (d = [1, 2, 3, 4, 5, 6, 7, 8]).
  2. Суммируйте первые три (индексы: 0, 1, 2) элемента ('sum1') и последние пять элементов (индексы: 3, 4, 5, 6, 7) ('sum2') ивыполнить операцию с этими производными суммами (abs(3*sum1 + 5*sum2).
  3. Выполнить эту операцию для восьми различных конфигураций. Следующая конфигурация будет заключаться в сумме трех элементов с индексами 1, 2, 3, а сумма пяти будетбыть меньше 4, 5, 6, 7, 0. При каждой новой конфигурации сумма элементов сдвигается на один индекс вправо.
  4. Из этого следует получить восемь значений в векторе или что-то ещеот выполнения выражения abs(3*sum1 + 5*sum2), каждое из которых содержит различные sum1 и sum2 из-за разницы в индексах.

  5. Среди этих восьми значений мне нужно найти максимум.

1 Ответ

0 голосов
/ 11 мая 2018

Представьте, что у вас бесконечная последовательность чисел, повторяющаяся.Это значительно облегчает проблему:

fn main() {
    let d = [1, 2, 3, 4, 5, 6, 7, 8];
    let mut numbers = d.iter().cycle();

    let max = (0..d.len())
        .map(|_| {
            let sum1: i32 = numbers.by_ref().take(3).sum();
            let sum2: i32 = numbers.by_ref().take(5).sum();

            // Skip one so the next iteration is offset by one
            numbers.next();

            (sum1, sum2)
        })
        .map(|(sum1, sum2)| i32::abs(3 * sum1 + 5 * sum2))
        .max();

    println!("{:?}", max);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...