Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2020, 10:46   #71
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 78
По умолчанию

Привет.
Есть одно задание, в котором я не понимаю что от меня спрашивают:

Со входного устройства поступает последовательность целых чисел. Длина последовательности неизвестна. Требуется найти сумму и количество элементов последовательности, удовлетворяющих условию k+1< ak < k2 +1, где k = 1, 2, 3… . Элементы последовательности читать до конца ввода.

Формат входных данных:
Последовательность целых чисел, разделенных одним или несколькими пробелами или переводом строки.

Формат выходных данных:
В одной строке искомая сумма и количество указанных в задаче элементов, разделенные одним пробелом.
FsGaCh вне форума Ответить с цитированием
Старый 08.07.2020, 11:19   #72
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Требуется найти сумму и количество элементов последовательности, удовлетворяющих условию k+1< ak < k2 +1, где k = 1, 2, 3…
есть последовательность чисел а
найти в данной последовательности элементы(числа) a[k] стоящие на k-ом месте(нумерация с 1)
для которых выполняются указанные условия
k+1 <a[k] // элемент больше "своего" порядкового номера k )
a[k] < k2 (???) +1 // элемент меньше... а чего меньше ?.. что такое k2 ?..


телепатия on
k2 = k *2 +1 ?.. удвоенный порядковый номер ?..
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 08.07.2020 в 11:22.
evg_m вне форума Ответить с цитированием
Старый 08.07.2020, 11:34   #73
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 78
По умолчанию

Оказывается, форум неправильно вывел. k2 это k^2

Спасибо, сделал, всё получилось.
Код:
a = list(map(int, input().split()))
n = []
for k in range(len(a)):
    if k + 2 < a[k] < (k+1)**2 + 1:
        n.append(a[k])
print(sum(n), len(n))

Последний раз редактировалось FsGaCh; 08.07.2020 в 11:45.
FsGaCh вне форума Ответить с цитированием
Старый 08.07.2020, 13:51   #74
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

При такой формулировке задания нельзя сначала читать всю последовательность, а потом еще и формировать список из подходящих элементов. На вход может подаваться огромное количество чисел, так что сумму и количество подходящих элементов нужно накапливать при обработке каждого входящего числа. Сходу и не скажу, как в питоне организовать чтение по одному числу.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.07.2020, 16:38   #75
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

Интересно, а такой вариант пройдёт?
Код:
sum = 0
k = 0
while True:
    try:
        a = int(input())
    except ValueError:
        break
    k = k + 1
    if k + 2 < a < (k + 1)**2 + 1:
        sum += a
print(sum, k, sep = ' ')
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 08.07.2020, 17:05   #76
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

ViktorR, input() будет брать сразу строку целиком, а числа по условию разделяются не только переносами строк, но и пробелами. Во-вторых, не очень понимаю, почему условие на значение элемента стало такое (по условию, вроде, k + 1 < a < k**2 + 1). Еще k не является искомым количеством элементов (нужен отдельный счетчик "хороших" элементов).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.07.2020, 17:22   #77
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,306
По умолчанию

BDA, спасибо. Надо подумать над первой частью.
Условие "скатал", а про отдельный счётчик забыл.

Ничего лучшего не придумал. Вычисление завершается, если не целого типа.
Код:
def summa():
    sum = 0
    k = 0
    n = 0
    while True:
        a = input().split()
        for i in a:
            try:
                m = int(i)
            except ValueError:
                return sum, n
            k = k + 1
            if k + 1 < m < k**2 + 1:
                n += 1
                sum += m

sum, n = summa()
print(sum, n, sep = ' ')
Как-то так, ...

Последний раз редактировалось ViktorR; 08.07.2020 в 18:23.
ViktorR вне форума Ответить с цитированием
Старый 08.07.2020, 22:45   #78
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Только что понял, почему такая проверка была. Range нумеровал с нуля, а по условию нумерация с единицы.
Код:
s = 0
k = 0
n = 0
while True:
    try:
        for i in map(int, input().split()):
            k += 1
            if k + 1 < i < k**2 + 1:
                n += 1
                s += i
    except EOFError:
        print("%d %d" % (s, n))
        break
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 13.07.2020, 12:13   #79
FsGaCh
Пользователь
 
Регистрация: 08.02.2020
Сообщений: 78
По умолчанию

Задание которое не смог выполнить:

Со входного устройства поступает последовательность целых чисел. Длина последовательности неизвестна. Вычислить максимальное расстояние между соседними локальными минимумами в последовательности. Заметим, что локальным минимумом называется элемент (кроме первого и последнего), который меньше двух своих соседей. Элементы последовательности читать до конца ввода.
Формат входных данных
Последовательность целых чисел, разделенных одним или несколькими пробелами или переводом строки.
Формат выходных данных
Максимальное расстояние между соседними локальными минимумами.

Мой вариант:
Код:
l = list(map(int, input().split()))
l1 = list(map(int, input().split()))
l.extend(l1)
ms = []
for i in range(1, len(l)-1):
    if l[i-1] > l[i] < l[i+1]:
        ms.append(l[i])
if math.fabs(l.index(ms[1]) - l.index(ms[2])) > math.fabs(l.index(ms[1]) - l.index(ms[0])):
    biggest = math.fabs(l.index(ms[1]) - l.index(ms[2]))
else:
    biggest = math.fabs(l.index(ms[1]) - l.index(ms[0]))
for i in range(1, len(ms) - 1):
    if biggest < math.fabs(l.index(ms[i]) - l.index(ms[i + 1])):
        biggest = math.fabs(l.index(ms[i]) - l.index(ms[i + 1]))
    if biggest < math.fabs(l.index(ms[i]) - l.index(ms[i - 1])):
        biggest = math.fabs(l.index(ms[i]) - l.index(ms[i - 1]))
    print(1)
print(biggest)
FsGaCh вне форума Ответить с цитированием
Старый 13.07.2020, 19:01   #80
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Код:
k = 0
dist = 0
prev_k = 0
while True:
    try:
        for i in map(int, input().split()):
            if k == 0:
                a = i
                k += 1
                continue
            elif k == 1:
                b = i
                k += 1
                continue
            else:
                c = i
            if a > b < c:
                if prev_k > 0:
                    cur_dist = k - prev_k - 1
                    if cur_dist > dist:
                        dist = cur_dist
                prev_k = k - 1
            a = b
            b = c
            k += 1
    except EOFError:
        print(dist)
        break
Может быть что-то не учел.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.07.2020 в 19:03.
BDA вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
готовлюсь к олимпиаде по информатике salauat Паскаль, Turbo Pascal, PascalABC.NET 25 01.12.2013 21:32
Подготовиться к олимпиаде за лето UaKot Свободное общение 20 10.05.2013 18:53
Подготовка к региональной олимпиаде New man Помощь студентам 20 14.12.2012 21:01
Задачи по олимпиаде Darick Помощь студентам 7 23.12.2011 15:45
Как подготовиться к олимпиаде? Kn793 Помощь студентам 16 26.07.2008 12:22