Задать вопрос
@dmitrii000

Почему решение задачи на leetcode работает неправильно?

Вот условие:
Given a positive integer n, find the sum of all integers in the range [1, n] inclusive that are divisible by 3, 5, or 7.
Return an integer denoting the sum of all numbers in the given range satisfying the constraint.

Example 1:
Input: n = 7
Output: 21
Explanation: Numbers in the range [1, 7] that are divisible by 3, 5, or 7 are 3, 5, 6, 7. The sum of these numbers is 21.

я написал решение
class Solution {
public:
    int sumOfMultiples(int n) {
        vector<short> arr;
        short count = 0;
        for (short i = 0; i < n; ++i) 
            arr.push_back(i);
        

        for (const short& x : arr) 
            if (x % 3 == 0 || x % 5 == 0 || x % 7 == 0) 
                count += x;     
        
        return count;
    }
};


но вместо того, чтобы выводить 21 как в примере, он выводит 14, что не так?
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
IvanU7n
@IvanU7n
nothing interesting here
-        for (short i = 0; i < n; ++i) 
+        for (short i = 1; i <= n; ++i)


да и зачем там 2 цикла вообще непонятно
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Alexandroppolus
@Alexandroppolus
кодир
Этот паззл можно решать вообще без циклов, за О(1)

class Solution {
private:
    int sumAP(int n, int m) {
        int c = n / m;
        return m * c * (c + 1) / 2;
    }
public:
    int sumOfMultiples(int n) {
        return sumAP(n, 3) + sumAP(n, 5) + sumAP(n, 7)
        - sumAP(n, 3 * 5) - sumAP(n, 3 * 7) - sumAP(n, 5 * 7)
        + sumAP(n, 3 * 5 * 7);
    }
};


см. сумму арифметической прогрессии, и "принцип включения-исключения"
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы