Как найти сумму четных чисел в диапазоне

Пользователь вводит 2 числа a и b. Нужно найти сумму только четных чисел между ними (и включая их).
Не знаю как закончить код и правильный ли он вообще.

a=int(input("a = "))
b=int(input("b = "))
for i in range(a, b):
    if i%2==0:
        ??
print(sum)

задан 14 окт 2022 в 20:27

yana's user avatar

3

for i in range(a, b):

Во втором аргументе range нужно указать число на 1 больше, т.к. итоговый диапазон не включает последнее число, т.е. при range(2,8) мы получим набор чисел от 2 до 7.

??

После того, как проверилось наше условие на четность, нужно сложить все подходящие числа. Для этого еще перед началом цикла нужно создать нулевую переменную (например, sum_numbers) и потом к ней каждый раз прибавлять каждое подходящее число. Это можно сделать через sum_numbers = sum_numbers + i или наиболее распространенный вариант sum_numbers += i.

Ниже представлен один из правильных вариантов:

a=int(input("a = "))
b=int(input("b = "))
sum_numbers = 0
for i in range(a, b + 1):
    if i % 2 == 0:
        sum_numbers += i
print(sum_numbers)

ответ дан 15 окт 2022 в 2:24

ex5ense's user avatar

1

a=int(input("a = "))
b=int(input("b = "))
ans = []
for i in range(a, b+1):
    if i%2==0:
        ans.append(i)
print(sum(ans))

проходим циклом по заданной последовательности, добавляем в итоговый массив данные соответствующие условию, потом используем встроенную функцию и получаем сумму.

ответ дан 14 окт 2022 в 20:35

VanoKi's user avatar

VanoKiVanoKi

18210 бронзовых знаков

5

способ 1:

res = sum(i for i in range(a, b + 1) if i % 2 == 0)

способ 1.1:

res = sum(i for i in range(2 * (a + 1) // 2, 2 * b // 2 + 1, 2))

способ 2:

res = ((a + 1) // 2 + b // 2) * (b // 2 - (a + 1) // 2 + 1)

тут просто решаем как сумму арифметической прогрессии

ответ дан 14 окт 2022 в 21:29

Zhihar's user avatar

ZhiharZhihar

36.8k4 золотых знака25 серебряных знаков65 бронзовых знаков

Можно считать сумму только четных чисел с шагом 2:

a=int(input("a = "))
b=int(input("b = "))
s = 0
for i in range(a + a % 2, b + 1, 2):
    s += i
print(s)

или однострочник:

print(sum(i for i in range(a + a % 2, b + 1, 2)))

ответ дан 14 окт 2022 в 21:41

Nowhere Man's user avatar

Nowhere ManNowhere Man

11.4k17 золотых знаков15 серебряных знаков27 бронзовых знаков

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given two integers L and R, the task is to find the sum of all even numbers in range L and R. 
    Examples: 
     

    Input: L = 2, R = 5 
    Output: 6
    2 + 4 = 6
    
    Input: L = 3, R = 8
    Output: 18

    Method-1: Iterate from L to R and sum all the even numbers in that range. 
    Method-2: Find the sum all the natural numbers from L to R and subtract the sum of odd natural numbers in range L to R from it.
    Method-3: 
     

    • Find the sum of all even numbers up to R i.e. No. of even numbers up to R will be R/2.
    • Find the sum of all even numbers up to L-1 i.e. No. of even numbers up to L-1 will be (L-1)/2.
    • Then subtract sumUptoL from sumuptoR.

    Sum of all even numbers up to any N will be: 
    R*(R+1) where R = N/2

    Below is the implementation of the above approach:
     

    C++

    #include <bits/stdc++.h>

    using namespace std;

    int sumNatural(int n)

    {

        int sum = (n * (n + 1));

        return sum;

    }

    int sumEven(int l, int r)

    {

        return sumNatural(r/2) - sumNatural((l-1) / 2);

    }

    int main()

    {

        int l = 2, r = 5;

        cout << "Sum of Natural numbers from L to R is "

             << sumEven(l, r);

        return 0;

    }

    Java

    import java.io.*;

    class GFG {

    static int sumNatural(int n)

    {

        int sum = (n * (n + 1));

        return sum;

    }

    static int sumEven(int l, int r)

    {

        return sumNatural(r/2) - sumNatural((l-1) / 2);

    }

        public static void main (String[] args) {

            int l = 2, r = 5;

            System.out.println ("Sum of Natural numbers from L to R is "+

             sumEven(l, r));

        }

    }

    Python3

    def sumNatural(n):

        sum = (n * (n + 1))

        return int(sum)

    def sumEven(l, r):

        return (sumNatural(int(r / 2)) -

                sumNatural(int((l - 1) / 2)))

    l, r = 2, 5

    print("Sum of Natural numbers",

                 "from L to R is", sumEven(l, r))

    C#

    using System;

    public class GFG{

    static int sumNatural(int n)

    {

        int sum = (n * (n + 1));

        return sum;

    }

    static int sumEven(int l, int r)

    {

        return sumNatural(r/2) - sumNatural((l-1) / 2);

    }

        static public void Main (){

                int l = 2, r = 5;

            Console.WriteLine("Sum of Natural numbers from L to R is "+

            sumEven(l, r));

        }

    }

    PHP

    <?php

    function sumNatural($n)

    {

        $sum = ($n * ($n + 1));

        return $sum;

    }

    function sumEven($l, $r)

    {

        return sumNatural((int)($r / 2)) -

               sumNatural((int)(($l - 1) / 2));

    }

    $l = 2; $r = 5;

    echo "Sum of Natural numbers " .

         "from L to R is " . sumEven($l, $r);

    ?>

    Javascript

    <script>

    function sumNatural(n)

    {

        let sum = Math.floor(n * (n + 1));

        return sum;

    }

    function sumEven(l, r)

    {

        return sumNatural(Math.floor(r/2)) - sumNatural(Math.floor(l-1) / 2);

    }

            let l = 2, r = 5;

            document.write ("Sum of Natural numbers from L to R is "+

             sumEven(l, r));

    </script>

    Output:

    Sum of Natural numbers from L to R is 6

    Time Complexity: O(1), since there is no loop or recursion.
    Auxiliary Space: O(1), since no extra space has been taken.

    Last Updated :
    11 Jul, 2022

    Like Article

    Save Article

    В школе на информатике в 9 классе детям преподают Python! Вообще, это классно и лучше всяких бейсиков, фортранов и паскалей. Главное, чтобы преподаватель мог хорошо объяснить и заинтересовать детей в программировании.

    Python - массив случайных чисел Соответственно, родителям приходится разбираться с домашними и самостоятельными работами по программированию:)

    Вот очередная такая домашка:

    В массиве случайных чисел из отрезка от 1 до 100 найти сумму всех четных элементов массива.

    Решение:

    import random

    mas = []

    sum = 0

    # Генерируем массив из 18 чисел от 1 до 100:

    mas = [random.randint(1,100) for i in range(1,18)]

    print(mas)

    # Проходим в цикле по массиву и все четные числа суммируем:

    for i in mas: 

        if (i%2) == 0:

            sum += i

    print(sum)

      Ответ:

    [12, 36, 55, 36, 65, 81, 14, 56, 58, 59, 48, 2, 40, 76, 13, 39, 43]                                                                            

    378

    Вариант с выводом ответа с интерполяцией строк:

    import random

    mas = []

    sum = 0

    # Генерируем массив из 18 чисел от 1 до 100:

    mas = [random.randint(1,100) for i in range(1,18)]

    print(‘Массив: %s’ % mas)

    # Проходим в цикле по массиву и все четные числа суммируем:

    for i in mas: 

        if (i%2) == 0:

            sum += i

    print(‘Сумма четных элементов: %s’ % sum)

     Ответ:

    Массив: [45, 18, 9, 89, 66, 47, 100, 46, 37, 39, 13, 93, 49, 55, 78, 37, 33]                                                                   

    Сумма четных элементов: 308

     

    Комментарии ()

    Оставьте свой комментарий

    stx

    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    1

    Сумма всех четных чисел в заданном диапазоне

    18.06.2019, 22:43. Показов 14490. Ответов 27

    Метки нет (Все метки)


    Студворк — интернет-сервис помощи студентам

    Всем привет.

    Есть задача:
    С помощью цикла for подсчитайте сумму всех четных чисел в диапазоне [-10;10].

    Решил так:

    Java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    int sum = 0;
     
            for (int i = -10; i <= 0; i++){
                System.out.print(i + " ");
                    if (0==(i%2)){
                        sum = sum + (-1 * i); // меняем знак у числа 
                    }
                }
     
            System.out.println();
     
            for (int i = 1; i <= 10; i++){
                System.out.print(i + " ");
                if (0==(i%2)){
                    sum += i;
                }
            }
     
            System.out.println("nСумма всех чётных чисел в диапазоне [-10;10]: " + sum);

    Может есть более изящное решение?
    Буду благодарен за критику и подсказки.

    Добавлено через 32 минуты
    Есть ещё такой вариант:

    Java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
            int sum = 0;
     
            for (int i = -10; i <= 10; i++){
                System.out.print(i + " ");
                    if (0==(i%2) && i <= 0){
                        sum = sum + (-1 * i); // избавляемся от минуса
                    } else if (0==(i%2) && i >= 0){
                        sum += i;
                    }
                }
     
            System.out.println("nСумма всех чётных чисел в диапазоне [-10;10]: " + sum);

    Возможно ли как-нибудь ещё поменять знак у числа?



    0



    iSmokeJC

    Am I evil? Yes, I am!

    Эксперт PythonЭксперт Java

    15687 / 8935 / 2595

    Регистрация: 21.10.2017

    Сообщений: 20,611

    18.06.2019, 22:53

    2

    Цитата
    Сообщение от stx
    Посмотреть сообщение

    избавляемся от минуса

    Т.е. нужна сумма модулей?

    Добавлено через 1 минуту

    Java
    1
    2
    3
    4
    5
    
    int sum = 0;
            for (int i = -10; i <= 10; i += 2) {
                sum += Math.abs(i);
            }
            System.out.println(sum);



    1



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    18.06.2019, 23:02

     [ТС]

    3

    Цитата
    Сообщение от iSmokeJC
    Посмотреть сообщение

    Т.е. нужна сумма модулей?

    В условии этого нет, но в моём решении по-другому никак, иначе в ответе будет 0.
    Ваш вариант выдаёт 50, что неверно, к сожалению.



    0



    Am I evil? Yes, I am!

    Эксперт PythonЭксперт Java

    15687 / 8935 / 2595

    Регистрация: 21.10.2017

    Сообщений: 20,611

    18.06.2019, 23:07

    4

    stx, проверь еще раз



    0



    Am I evil? Yes, I am!

    Эксперт PythonЭксперт Java

    15687 / 8935 / 2595

    Регистрация: 21.10.2017

    Сообщений: 20,611

    18.06.2019, 23:09

    5

    Хинт

    Сумма всех четных чисел в заданном диапазоне



    0



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    18.06.2019, 23:21

     [ТС]

    6

    Теперь работает



    0



    Catstail

    Модератор

    Эксперт функциональных языков программированияЭксперт Python

    35192 / 19409 / 4062

    Регистрация: 12.02.2012

    Сообщений: 32,413

    Записей в блоге: 13

    19.06.2019, 09:38

    7

    Java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    import java.util.*;
    import java.util.stream.*;
    import java.lang.*;
    import java.io.*;
     
    class Ideone
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            int s;
            s=IntStream.range(-10,15)
                .filter(x -> x%2==0)
                .sum();
            System.out.println(s);    
        }
    }



    0



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    19.06.2019, 21:07

     [ТС]

    8

    Catstail, к сожалению, код выдаёт неверный ответ: 26
    При изменении диапазона на требуемый [-10,10], выдаёт: -10

    А ещё IntStream впервые вижу, поэтому для меня сложновато написано



    0



    46 / 79 / 6

    Регистрация: 10.08.2013

    Сообщений: 237

    19.06.2019, 21:26

    9

    stx, надо range(-10, 11), он конец интервала не включает.



    0



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    19.06.2019, 21:29

     [ТС]

    10

    Цитата
    Сообщение от rerf2010rerf
    Посмотреть сообщение

    надо range(-10, 11), он конец интервала не включает.

    Поменял на (-10, 11), в ответе: 0
    Ответ, к сожалению, неверный.



    0



    46 / 79 / 6

    Регистрация: 10.08.2013

    Сообщений: 237

    19.06.2019, 21:41

    11

    Так вам что нужно то? Сумму модулей всё таки?

    Цитата
    Сообщение от stx
    Посмотреть сообщение

    Цитата Сообщение от iSmokeJC Посмотреть сообщение
    Т.е. нужна сумма модулей?
    В условии этого нет, но в моём решении по-другому никак, иначе в ответе будет 0.

    И чем вас ноль не устраивает? Если не брать сумму модулей, то ноль и должен быть, ибо интервал симметричен относительно ноля.



    0



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    19.06.2019, 21:56

     [ТС]

    12

    Цитата
    Сообщение от rerf2010rerf
    Посмотреть сообщение

    И чем вас ноль не устраивает? Если не брать сумму модулей, то ноль и должен быть, ибо интервал симметричен относительно ноля.

    В моём понимании условия задачи, нужна сумма модулей



    0



    rerf2010rerf

    46 / 79 / 6

    Регистрация: 10.08.2013

    Сообщений: 237

    19.06.2019, 22:05

    13

    Ну тогда можно как-то так

    Java
    1
    2
    3
    4
    
    s=IntStream.range(-10,15)
                .filter(x -> x%2==0)
                .map(Math::abs)
                .sum();



    1



    Модератор

    Эксперт функциональных языков программированияЭксперт Python

    35192 / 19409 / 4062

    Регистрация: 12.02.2012

    Сообщений: 32,413

    Записей в блоге: 13

    19.06.2019, 22:07

    14

    Цитата
    Сообщение от stx
    Посмотреть сообщение

    При изменении диапазона на требуемый [-10,10], выдаёт: -10

    – естественно. Потому, что правая граница в range не включается. Поэтому правильный диапазон будет range(-10,11). И будет правильный ответ = 0.

    Цитата
    Сообщение от stx
    Посмотреть сообщение

    для меня сложновато написано

    – в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств.



    2



    6 / 6 / 0

    Регистрация: 17.09.2012

    Сообщений: 104

    19.06.2019, 22:49

     [ТС]

    15

    Цитата
    Сообщение от Catstail
    Посмотреть сообщение

    в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств.

    Сложность в том, что я начинающий в Java
    Про стримы обязательно почитаю, спасибо.



    0



    alicesmagic

    233 / 130 / 27

    Регистрация: 24.08.2016

    Сообщений: 874

    20.06.2019, 08:53

    16

    Вообще, задача изначально сформулирована вполне однозначно.
    “С помощью цикла for подсчитайте сумму всех четных чисел в диапазоне [-10;10]”
    Странное нежелание топикстартера видеть в ответе 0 не должна быть основанием для суммирования модулей.
    И, следовательно, самый короткий и изящный код должен быть таким:

    Java
    1
    2
    3
    4
    
    int sum = 0;
    for (int i = -10; i <= 10; i += 2) {
       sum += i;
    }

    println() в данном случае не обязателен… ведь в условии требуется только подсчитать

    Добавлено через 5 минут

    Цитата
    Сообщение от Catstail
    Посмотреть сообщение

    в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств.

    Не соответствует условию задачи. В условии: “С помощью цикла for…”



    1



    Автоматизируй это!

    Эксперт Python

    6937 / 4368 / 1176

    Регистрация: 30.03.2015

    Сообщений: 12,766

    Записей в блоге: 29

    20.06.2019, 10:05

    17

    Цитата
    Сообщение от alicesmagic3d
    Посмотреть сообщение

    амый короткий и изящный код должен быть таким:

    не совсем так, почти. Самый изящный – это когда метод принимает левую и правую границу диапазона и возвращает сумму

    Цитата
    Сообщение от alicesmagic3d
    Посмотреть сообщение

    Странное нежелание топикстартера видеть в ответе 0 не должна быть основанием для суммирования модулей.

    Цитата
    Сообщение от alicesmagic3d
    Посмотреть сообщение

    Не соответствует условию задачи. В условии: “С помощью цикла for…”



    1



    Catstail

    20.06.2019, 10:31

    Не по теме:

    Цитата
    Сообщение от alicesmagic3d
    Посмотреть сообщение

    Не соответствует условию задачи. В условии: “С помощью цикла for…”

    – согласен…



    0



    alicesmagic

    233 / 130 / 27

    Регистрация: 24.08.2016

    Сообщений: 874

    20.06.2019, 11:16

    19

    Цитата
    Сообщение от Welemir1
    Посмотреть сообщение

    Самый изящный – это когда метод принимает левую и правую границу диапазона и возвращает сумму

    Согласна. Тогда только “самый короткий”

    Добавлено через 10 минут
    А вот так?:

    Java
    1
    
    for (int i = -10, sum = i; i <= 10; i += 2, sum += i);



    0



    2442 / 1898 / 475

    Регистрация: 17.02.2014

    Сообщений: 9,153

    20.06.2019, 13:04

    20

    Цитата
    Сообщение от alicesmagic3d
    Посмотреть сообщение

    самый короткий

    это, когда не нужно считать, а понимаешь, что ряд симметричен, или считать формулой арифметической прогрессии.



    0



    Лучший ответ

    Данила Богомолов

    Гуру

    (3418)


    11 лет назад

    uses crt;
    var
    i,s:integer;
    BEGIN
    i:=10;
    while i<=100 do
    begin
    s:=s+i;
    i:=i+2;
    end;
    write(s);
    END.

    Остальные ответы

    thesn

    Мастер

    (1588)


    11 лет назад

    var i,s:integer;
    begin
    for i:=10 to 100 do if (i mod 2=0) then inc(s,i);
    writeln(s);
    end.

    Rustem

    Мастер

    (1179)


    11 лет назад

    qwertyui

    DiG DeePeR

    Мыслитель

    (7228)


    11 лет назад

    В топку циклы, все гораздо проще:

    a:=10;
    b:=100;
    writeln((b*(b+2)-a*(a-2))/4);

    Удачи!

    Фарид Салимов

    Ученик

    (175)


    5 лет назад

    На PHP 7

    <?php

    $sum=0;

    $i=10;

    while($i<=40)

    {$sum+=$i;
    $i+=2;
    }

    echo “$sum”;
    ?>

    Добавить комментарий