Помогите чайнику / программирование :: пидоры помогите (реактор помоги) :: помощь :: python :: geek (Прикольные гаджеты. Научный, инженерный и айтишный юмор)

программирование geek python помощь песочница пидоры помогите 

Помогите чайнику

Дана задача с такими условиями
Посчитать сумму чисел от 1 до N. Значение N по модулю не превышает 10^{9} .
Входные данные содержат одно целое число — N.
Нужно вывести целое число — сумму чисел от 1 до N.

Мой "код" на Python выглядит так:

N=int(input())
d=1
rez=((2+d*(N-1))*N)/2
print(int(rez))

Из 8 вариантов переменной N, c 5 получается правильный результат, а два выдают неправильный. В чём может быть проблема?

Подробнее
программирование,geek,Прикольные гаджеты. Научный, инженерный и айтишный юмор,python,помощь,песочница,пидоры помогите,реактор помоги
Еще на тему
Развернуть
rez=((1+d*(N))*N)/2
doki doki 28.09.201921:34 ответить ссылка 0.1
результаты не изменились
gogito gogito 28.09.201921:36 ответить ссылка -0.5
попробуй тогда переменную не int взять, а float. Может сработать так как насколько я помню под переменную данного типа отдают больше памяти.
doki doki 28.09.201921:41 ответить ссылка -1.1
Хороший вариант, но опять ничего не поменялось
Там вот такая подсказка есть. если это что то даст
"Для представления целых чисел в языках программирования обычно используется несколько
целочисленных типов данных с разными допустимыми диапазонами значений."
gogito gogito 28.09.201921:46 ответить ссылка -0.6
N=float(input())
d=1.0
rez=((1.0+(N))*N)/2
print(float(rez))
Выдаёт все ошибки
gogito gogito 28.09.201921:53 ответить ссылка -0.6
нахера тут флоат? Здесь целочисленное же все.
JRed JRed 28.09.201922:00 ответить ссылка 0.8
Расширить диапазон значений, не змеевод, так что фиг его знает какие ещё типы поддерживает, ниже предложили так:
N=int64(input())
rez=((1+N)*N)/2
print(int64(rez))
В питоне автоматически применяется длинная арифметика для злоебучих целых чисел, превышающих стандартные размеры. Должно работать. Попробуй деление осуществлять с помощью "//" (целочисленное деление).
d конечно лишняя, но пусть будет
doki doki 28.09.201921:37 ответить ссылка 0.1
Согласен, она осталась после какой-то из бесчисленных попыток поправить результат
gogito gogito 28.09.201921:39 ответить ссылка -0.6
Так, блэт :) То ли я слишком пьян, то ли формула неверная. Вроде ж в условии сумма целых чисел от одного до N? То есть rez=N*(N+1)/2 Че ещё за d?
Vaeld Vaeld 28.09.201921:45 ответить ссылка 0.9
Это разность арифметической прогрессии
gogito gogito 28.09.201921:48 ответить ссылка -0.6
До N включительно? Если да, то rez=N*(N+1)/2. По твоей формуле - до N-1
Согласен, но даже так, те же два остаются неверными
gogito gogito 28.09.201921:57 ответить ссылка -0.6
Так, а какая версия интерпритатора? 2 или 3?
3
gogito gogito 28.09.201922:04 ответить ссылка -0.6
В задаче подразумевается появление заведомо неверных чисел? Например отрицательных?
Неизвестно. Я вообще без понятия что там, все что знаю я, всё в посте
gogito gogito 28.09.201922:10 ответить ссылка -0.6
Насколько я вижу, из описания, даже сделана пометка - по модулю. А значит отрицательные возможны. Сделай проверку виду:
if N >= 0:
rez = N*(N+1) / 2
else:
rez = -N*(N-1)/2 + 1
Теперь два правильно, а остальные нет)
gogito gogito 28.09.201922:16 ответить ссылка -0.6
Те самые два? Или другие?
Другие
gogito gogito 28.09.201922:18 ответить ссылка -0.6
Т.е. отрицательные N все же подаются, но их требуется брять по модулю? Хмм. А что за сайт то?
А ведь нигде не сказано про модуль. Единственное упоминание верхней границы значения переменной. То есть прогрессия может быть и от 1 до -1000000000
Да вот и я про тоже, но вот мы добавили проверку на сумму в отрицательную сторону и стали валиться первые 5. Какие там N - неизвестно, ориентируемся вслепую.
Может до N исключительно?
Единственное что могу сказать - вряд ли дело в типах. В python 3 для целых чисел есть 1 тип - int. Он может содержать в себе значения до 2^31 на x86 и до 2^63 на x64 версиях. В python 2 - да, есть отдельный тип - long, но в 3ке их слили с int. Так что типы не при чем,
Я не питонист, про типы хз. Просто тут прозвучала "подсказка", где почти явно говорили про расширенный int.

А может просто цикл запилить? Не так элегантно, но действенно.
в int() в python3 слили long, так что достаточно просто int()
JRed JRed 28.09.201923:51 ответить ссылка 0.1
Школьная олимпиада, ознакомительный тур https://olympic.nsu.ru/nsuts-new/new_report
gogito gogito 28.09.201922:28 ответить ссылка -0.9
Вот 2 варинат. Попробуй оба, скажи какие ошибки полезли.
#	С учетом отрицательных N = int(inputO)
rez = (N*(abs(N)+l) / 2) if N <= 0:
rez = rez + 1 print(int(rez))
#	N по модулю
N = abs(int(input())) if N == 0: print(1) else:
print(int(N*(N+l) / 2))
ниже уже постил.
Исключение у нас одно, так что городить огород нет смысла.
Хотя, у меня тоже тут тот еще велосипед
rez =	((N+l)*N/2)
print(rez)
elif N < 0:
rez	(((N-l)*N/2)*(-l))
print(rez)
JRed JRed 28.09.201923:01 ответить ссылка 0.1
В 6й строке нужно еще 1 отнять, если от N до 1 считать. Проверь при N=-10:
sum(range(N, 2))
Тогда так, получается.
("input \n$"))
1 N = int(i 2T if N > 0:
rez =	((N+l)*N/2)
4	print(rez)
5	- elif N < 0:
rez	(((N-l)*N/2)*(-l))
print( (rez+1))
8T else:
9	print("1")
JRed JRed 28.09.201923:47 ответить ссылка 0.1
Одно всё равно не правильно, но спасибо огромное
gogito gogito 29.09.201909:21 ответить ссылка -0.6
Ну и в input() надо все ж чо-т напейсать. А то некрасиво.
например: input("input \n$")
JRed JRed 28.09.201923:08 ответить ссылка -0.2
Если это на сайте проверяется, то там автотестинг: как раз таки не надо - тесты красоту не ценят. Однако я удивлен, что тут данные заносят в stdin, а не требуют скачать из файла.
necrosis necrosis 28.09.201923:11 ответить ссылка -0.2
С первым вариантом неправильным остаётся только второй
А со вторым неправильны 3, два начальных и один другой
gogito gogito 29.09.201909:14 ответить ссылка -0.6
Значит есть что то одно, что мы не учли в первом варианте.
У меня остается только одно предположение. int ограничен 2^63 в x64 версии (где то 1e+18), а пограничное значение N - 1e^10. При перемножении разряд может переполниться. Поэтому, давай добавим деление заранее, что бы избежать этого.
N = int(inputO)
N2 = N / 2
rez = N2 * (abs(N)+l) if N <= 0:
rez = rez + 1 print(int(rez))
Хм, всё равно тот же результат, последнее не правильно. Может проблема не в переполнение
gogito gogito 29.09.201912:42 ответить ссылка -0.6
Жаль. Тогда остается заменить
N2 = N / 2
На
N2 = N // 2
Если не поможет, тогда я уже точно ничего путного не придумаю.
N = 0 надо отдельно обрабатывать.
от 1 до 0 сумма будет равна 1.
А тут 0 будет. Если, конечно, я не путаю сейчас ничего
JRed JRed 28.09.201922:47 ответить ссылка 0.2
Верно. Поправил в вариантах, что выше
Покажи, при каких вариантах не срабатывает
necrosis necrosis 28.09.201921:48 ответить ссылка 0.1
В этом вся проблема. Эта задача с сайта, туда я загружаю код, а мне выдаётся результат. Соответственно варианты мне не известны.
gogito gogito 28.09.201921:50 ответить ссылка -0.6
ошибка скорее всего при отрицательных N
N целое, а не натуральное в условии
Когда я меняю отрицательные N на положительные, один из ответов становится неверным
gogito gogito 28.09.201921:54 ответить ссылка -0.6
double может хранить без потерь 16-значные целые числа, а результат перемножения 9*10^8 - 18-значный
nun-buoy nun-buoy 28.09.201921:52 ответить ссылка -0.7
Пожалуйста, можно подробнее, что изменить, что бы поправить?
gogito gogito 28.09.201921:55 ответить ссылка -0.6
может Decimal поможет https://docs.python.org/2/library/decimal.html
если N 0, то (N + 1) * N / 2
и числа бери либо double, либо int64_t
ivan_2013 ivan_2013 28.09.201921:55 ответить ссылка -0.2
если N меньше или равно 0 - то (2 + module(N)) * (1 - module(N) / 2
если N больше 0 - то (N + 1) * N / 2
и как написали выше, double хранит только примерно 16 десятичных чисел, так что лучше бери int64_t - он как раз хранит больше 18 десятичных чисел
Я всё же чайник, можно объяснить пожалуйста, как это сделать?
gogito gogito 28.09.201922:06 ответить ссылка -0.6
я в python не шарю, так что только логику опишу
int64_t N = int64(input())
if (N больше 0)
then
rez = (int64_t(1) + N) * N / 2;
else
rez = (int64_t(2) + module(N)) * (int64_t(1) - module(N)) / 2;
endif
S = (a1+aN)*N/2

N=int(input())
rez = int((N+1)*N/2)
print(rez)
JRed JRed 28.09.201922:07 ответить ссылка 0.5
вот так, если учитывать отрицательные числа
rez =	((N+l)*N/2)
print(rez)
elif N < 0:
rez	(((N-l)*N/2)*(-l))
print(rez)
JRed JRed 28.09.201922:36 ответить ссылка 0.2
Ха, я у тебя в заблокированных! Иди на хуй, мразь)
Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
ГЕНЕРАТОР СИНУСА с АПЧ ^-1 . И Д
250-400 КГц
МИНУТЫ
15
КНОПКИ Т АММЕР А
мощность
100%
.т- 50% .
выход
СИГНАЛА
ВКЛЮЧЕНИЕ
ПИТАНИЯ
ПИТАНИЕ ПРИБОРА
НЕТ РЕЗОНАНСА ИСПОЛЬЗОВАТЬ ТОЛЬКО В СЛУЧАЕ КРАЙНЕЙ НЕОБХОДИМОСТИ КУПОН
НА 1 помощь