Пользователь вводит 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
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
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
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
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 ManNowhere Man
11.4k17 золотых знаков15 серебряных знаков27 бронзовых знаков
Improve Article
Save Article
Like Article
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! Вообще, это классно и лучше всяких бейсиков, фортранов и паскалей. Главное, чтобы преподаватель мог хорошо объяснить и заинтересовать детей в программировании.
Соответственно, родителям приходится разбираться с домашними и самостоятельными работами по программированию:)
Вот очередная такая домашка:
В массиве случайных чисел из отрезка от 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 Метки нет (Все метки)
Всем привет. Есть задача: Решил так:
Может есть более изящное решение? Добавлено через 32 минуты
Возможно ли как-нибудь ещё поменять знак у числа?
0 |
iSmokeJC Am I evil? Yes, I am! 15687 / 8935 / 2595 Регистрация: 21.10.2017 Сообщений: 20,611 |
||||
18.06.2019, 22:53 |
2 |
|||
избавляемся от минуса Т.е. нужна сумма модулей? Добавлено через 1 минуту
1 |
6 / 6 / 0 Регистрация: 17.09.2012 Сообщений: 104 |
|
18.06.2019, 23:02 [ТС] |
3 |
Т.е. нужна сумма модулей? В условии этого нет, но в моём решении по-другому никак, иначе в ответе будет 0.
0 |
Am I evil? Yes, I am! 15687 / 8935 / 2595 Регистрация: 21.10.2017 Сообщений: 20,611 |
|
18.06.2019, 23:07 |
4 |
stx, проверь еще раз
0 |
Am I evil? Yes, I am! 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 Модератор 35192 / 19409 / 4062 Регистрация: 12.02.2012 Сообщений: 32,413 Записей в блоге: 13 |
||||
19.06.2019, 09:38 |
7 |
|||
0 |
6 / 6 / 0 Регистрация: 17.09.2012 Сообщений: 104 |
|
19.06.2019, 21:07 [ТС] |
8 |
Catstail, к сожалению, код выдаёт неверный ответ: 26 А ещё 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 |
надо range(-10, 11), он конец интервала не включает. Поменял на (-10, 11), в ответе: 0
0 |
46 / 79 / 6 Регистрация: 10.08.2013 Сообщений: 237 |
|
19.06.2019, 21:41 |
11 |
Так вам что нужно то? Сумму модулей всё таки?
Цитата Сообщение от iSmokeJC Посмотреть сообщение И чем вас ноль не устраивает? Если не брать сумму модулей, то ноль и должен быть, ибо интервал симметричен относительно ноля.
0 |
6 / 6 / 0 Регистрация: 17.09.2012 Сообщений: 104 |
|
19.06.2019, 21:56 [ТС] |
12 |
И чем вас ноль не устраивает? Если не брать сумму модулей, то ноль и должен быть, ибо интервал симметричен относительно ноля. В моём понимании условия задачи, нужна сумма модулей
0 |
rerf2010rerf 46 / 79 / 6 Регистрация: 10.08.2013 Сообщений: 237 |
||||
19.06.2019, 22:05 |
13 |
|||
Ну тогда можно как-то так
1 |
Модератор 35192 / 19409 / 4062 Регистрация: 12.02.2012 Сообщений: 32,413 Записей в блоге: 13 |
|
19.06.2019, 22:07 |
14 |
При изменении диапазона на требуемый [-10,10], выдаёт: -10 – естественно. Потому, что правая граница в range не включается. Поэтому правильный диапазон будет range(-10,11). И будет правильный ответ = 0.
для меня сложновато написано – в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств.
2 |
6 / 6 / 0 Регистрация: 17.09.2012 Сообщений: 104 |
|
19.06.2019, 22:49 [ТС] |
15 |
в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств. Сложность в том, что я начинающий в Java
0 |
alicesmagic 233 / 130 / 27 Регистрация: 24.08.2016 Сообщений: 874 |
||||
20.06.2019, 08:53 |
16 |
|||
Вообще, задача изначально сформулирована вполне однозначно.
println() в данном случае не обязателен… ведь в условии требуется только подсчитать Добавлено через 5 минут
в чем сложность? Код короткий. Про stream-ы в Java написаны горы руководств. Не соответствует условию задачи. В условии: “С помощью цикла for…”
1 |
Автоматизируй это! 6937 / 4368 / 1176 Регистрация: 30.03.2015 Сообщений: 12,766 Записей в блоге: 29 |
|
20.06.2019, 10:05 |
17 |
амый короткий и изящный код должен быть таким: не совсем так, почти. Самый изящный – это когда метод принимает левую и правую границу диапазона и возвращает сумму
Странное нежелание топикстартера видеть в ответе 0 не должна быть основанием для суммирования модулей.
Не соответствует условию задачи. В условии: “С помощью цикла for…”
1 |
Catstail |
20.06.2019, 10:31
|
Не по теме:
Не соответствует условию задачи. В условии: “С помощью цикла for…” – согласен…
0 |
alicesmagic 233 / 130 / 27 Регистрация: 24.08.2016 Сообщений: 874 |
||||
20.06.2019, 11:16 |
19 |
|||
Самый изящный – это когда метод принимает левую и правую границу диапазона и возвращает сумму Согласна. Тогда только “самый короткий” Добавлено через 10 минут
0 |
2442 / 1898 / 475 Регистрация: 17.02.2014 Сообщений: 9,153 |
|
20.06.2019, 13:04 |
20 |
самый короткий это, когда не нужно считать, а понимаешь, что ряд симметричен, или считать формулой арифметической прогрессии.
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”;
?>