Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 08.08.2022
Сообщений: 5
1

Задача "Толстяк и малыш"

08.08.2022, 13:22. Показов 716. Ответов 13

Author24 — интернет-сервис помощи студентам
Добрый день!
Помогите решить задачу. Уже неделю бьюсь и не понимаю что не так.


Условия задачи:
Дается список целых чисел arr. Нужно проверить есть ли в этом списке элементы N и M, при условии N = 2 * M,

Пример:
arr = [0,1,7,11, 0]
Результат: True
N и M числа - это 0 и 0, так как 0 = 2 * 0

arr = [5, 2, 7, 3, 10, 9]
Результат: True
N и M числа - это 10 и 5, так как 10 = 2 * 5.

arr = [10, 2, 7, 0, 3]
Результат: False
Потому что в списке нету элементов N и M

arr = [7,1,14,11]
Результат: True
N и M числа - это 7 и 14, так как 14 = 2 * 7.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def check_if_exists(arr) -> bool:
    
    for m in arr:
        n = m * 2
        if n in arr:
            return True
        return False
 
 
arr1 = [0, 1, 7, 11, 0]
arr2 = [5, 2, 7, 3, 10, 9]
arr3 = [10, 2, 7, 0, 3]
arr4 = [7, 1, 14, 11]
arr5 = [3, 1, 7, 11]
arr6 = [10, 2, 5, 3]
arr7 = [4, 7, 16, 17, 0, 4]
 
print("arr1 - должно быть True: ", check_if_exists(arr1))
print("arr2 - должно быть True: ", check_if_exists(arr2))
print("arr3 - должно быть False: ", check_if_exists(arr3))
print("arr4 - должно быть True: ", check_if_exists(arr4))
print("arr5 - должно быть False: ", check_if_exists(arr5))
print("arr6 - должно быть True: ", check_if_exists(arr6))
print("arr7 - должно быть False: ", check_if_exists(arr7))
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.08.2022, 13:22
Ответы с готовыми решениями:

Бинарный поиск по ответу - Малыш и Карлсон
Малыш может съесть банку варенья за А1 минут, корзину печенья за B1 минут, выпить бутылку молока за...

Задача F. Малыш играет в "Морской бой"
Малыш играет в "Морской бой". Поле для игры представляет собой квадрат N x N клеток...

Малыш и Карлсон живут в прямоугольной комнате AxB
Люди, пожайлуста помогите с решением задачки в Qbasic! Малыш и Карлсон живут в прямоугольной...

Малыш, Карлсон и Винни-Пух ели варенье
Малыш, Карлсон и Винни-Пух ели варенье. Они начали одновременно и ели до тех пор, пока варенье не...

Напишите программу, которая узнаёт у человека его возраст и сообщает, кто он: малыш (до 6 лет), школьник (от 7 до 17
Напишите программу, которая узнаёт у человека его возраст и сообщает, кто он: малыш (до 6 лет),...

13
2429 / 1471 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
08.08.2022, 13:30 2
Где n или m брать?

Добавлено через 3 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def check_if_exists(arr, m) -> bool:
    return m in arr and m * 2 in arr
 
 
arr1 = [0, 1, 7, 11, 0]
arr2 = [5, 2, 7, 3, 10, 9]
arr3 = [10, 2, 7, 0, 3]
arr4 = [7, 1, 14, 11]
arr5 = [3, 1, 7, 11]
arr6 = [10, 2, 5, 3]
arr7 = [4, 7, 16, 17, 0, 4]
 
arr = [arr1, arr2, arr3, arr4, arr5, arr6, arr7]
 
m = int(input('m: '))
for a in arr:
    print(f'Список: {a}, m = {m}, n = {m * 2}: {check_if_exists(a, m)}')
0
0 / 0 / 0
Регистрация: 08.08.2022
Сообщений: 5
08.08.2022, 13:35  [ТС] 3
Дело в том, и N и M являются элементами одного списка.

И суть задачи в том, чтобы проверить наличие N в данном списке. (при условии что N = 2 * M).
0
2429 / 1471 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
08.08.2022, 13:37 4
Цитата Сообщение от oqrowqa Посмотреть сообщение
Дело в том, и N и M являются элементами одного списка.
Так где они находятся, где их брать?
Вот твой список:
Python
1
[4, 7, 16, 17, 0, 4]
где n и m?
Или они в каком то другом списке? Куда смотреть-то?
0
0 / 0 / 0
Регистрация: 08.08.2022
Сообщений: 5
08.08.2022, 13:41  [ТС] 5
В данном списке [4, 7, 16, 17, 0, 4], M это каждый элемент.
При проверке на наличие N который равен M * 2, здесь должно выдать False.

Почему?
Т.к. 4 * 2 = 8, а 8 в списке нет. И по такой же логике с остальными элементами.
0
2429 / 1471 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
08.08.2022, 13:47 6
Цитата Сообщение от oqrowqa Посмотреть сообщение
В данном списке [4, 7, 16, 17, 0, 4], M это каждый элемент.
При проверке на наличие N который равен M * 2, здесь должно выдать False.
Почему?
Т.к. 4 * 2 = 8, а 8 в списке нет. И по такой же логике с остальными элементами.
Еще больше непонятно.
Python
1
[4, 7, 16, 17, 0, 4]
Т.е. для этого списка проверить пары:
4, 8
7, 14
16, 32
17, 34
0, 0
4, 8
Если они все должны присутствовать в списке, то тут проверять даже смысла нет, сразу False.
Проверять каждую пару отдельно?

Скопируй лучше условие задачи так, как тебе ее дали.

Добавлено через 1 минуту
Если m это первый элемент списка, то
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def check_if_exists(arr) -> bool:
    if not arr:
        return False
    return arr[0] in arr and arr[0] * 2 in arr
 
 
arr1 = [0, 1, 7, 11, 0]
arr2 = [5, 2, 7, 3, 10, 9]
arr3 = [10, 2, 7, 0, 3]
arr4 = [7, 1, 14, 11]
arr5 = [3, 1, 7, 11]
arr6 = [10, 2, 5, 3]
arr7 = [4, 7, 16, 17, 0, 4]
 
print("arr1 - должно быть True: ", check_if_exists(arr1))
print("arr2 - должно быть True: ", check_if_exists(arr2))
print("arr3 - должно быть False: ", check_if_exists(arr3))
print("arr4 - должно быть True: ", check_if_exists(arr4))
print("arr5 - должно быть False: ", check_if_exists(arr5))
print("arr6 - должно быть True: ", check_if_exists(arr6))
print("arr7 - должно быть False: ", check_if_exists(arr7))
но тогда твои тесты не проходит.
0
0 / 0 / 0
Регистрация: 08.08.2022
Сообщений: 5
08.08.2022, 13:49  [ТС] 7
Цитата Сообщение от oqrowqa Посмотреть сообщение
Дается список целых чисел arr. Нужно проверить есть ли в этом списке элементы N и M, при условии N = 2 * M,
Пример:
arr = [0,1,7,11, 0]
Результат: True
N и M числа - это 0 и 0, так как 0 = 2 * 0
arr = [5, 2, 7, 3, 10, 9]
Результат: True
N и M числа - это 10 и 5, так как 10 = 2 * 5.
arr = [10, 2, 7, 0, 3]
Результат: False
Потому что в списке нету элементов N и M
arr = [7,1,14,11]
Результат: True
N и M числа - это 7 и 14, так как 14 = 2 * 7.
вот прям так и дали..

код в шапке, это моя попытка протестировать функцию
0
2429 / 1471 / 633
Регистрация: 01.11.2021
Сообщений: 2,269
08.08.2022, 13:56 8
Цитата Сообщение от oqrowqa Посмотреть сообщение
вот прям так и дали
Тогда код постом выше, по-другому не знаю.
0
0 / 0 / 0
Регистрация: 08.08.2022
Сообщений: 5
08.08.2022, 14:01  [ТС] 9
Цитата Сообщение от Alexarh Посмотреть сообщение
Тогда код постом выше, по-другому не знаю.
спасибо, за быстрое реагирование !
0
Yuri V
08.08.2022, 14:16
  #10

Не по теме:

Тоже сначала решил, что есть заданные N и M, а это нахождение удвоенного значения в том же списке/массиве.
хотя пример с нулём действительно не однозначный, т.к. подходит любому чётному.

И я бы проверял только уникальные значения и сравнивал только с парными, хотя так может проще.

0
Эксперт Python
3588 / 1688 / 305
Регистрация: 18.01.2021
Сообщений: 3,123
08.08.2022, 15:41 11
oqrowqa,
Python
1
2
3
4
5
6
7
8
9
10
11
12
def check_if_exists(arr) -> bool:
 
    arr.sort()
    i,j = 0,1
    while j < len(arr):
        if arr[j] < arr[i] * 2: 
            j += 1
        elif arr[j] > arr[i] * 2 :
            i += 1
        else:
            return True
    return False
Код
arr1 - должно быть True:  True
arr2 - должно быть True:  True
arr3 - должно быть False:  False
arr4 - должно быть True:  True
arr5 - должно быть False:  False
arr6 - должно быть True:  True
arr7 - должно быть False:  False
Добавлено через 5 минут

Не по теме:

P.S. Вижу, что меняет список, но лень...

0
4937 / 3290 / 1140
Регистрация: 21.03.2016
Сообщений: 8,071
08.08.2022, 15:51 12
oqrowqa, у вас если условие не выполнилось то возвращает False потому как return False находится в теле цикла
Python
1
2
3
4
5
6
7
def check_if_exists(arr) -> bool:
    
    for m in arr:
        n = m * 2
        if n in arr:
            return True
    return False
0
Эксперт Python
3588 / 1688 / 305
Регистрация: 18.01.2021
Сообщений: 3,123
08.08.2022, 16:14 13
Semen-Semenich, там еще и на количество нулей тогда проверить надо.
У меня тоже косяк, работает только с неотрицательными числами.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def check_if_exists(arr) -> bool:
    if min(arr) * max(arr) < 0:
        if not check_if_exists([abs(x) for x in arr if x < 0]):
            return check_if_exists ([x for x in arr if x >= 0])
        return True
    
    sorted_arr = sorted(arr)
    i,j = 0,1
    while j < len(arr):
        if sorted_arr[j] < sorted_arr[i] * 2: 
            j += 1
        elif sorted_arr[j] > sorted_arr[i] * 2 :
            i += 1
        else:
            return True
    return False
0
4921 / 2674 / 550
Регистрация: 07.11.2019
Сообщений: 4,395
08.08.2022, 17:09 14
Python
1
2
3
4
5
6
def check_if_exists(arr) -> bool:
    if 0 in arr:
        arr.remove(0)
    s1=set(arr)
    s2=set(map(lambda x: x*2, s1))
    return len(s1&s2)>0
1
08.08.2022, 17:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2022, 17:09
Помогаю со студенческими работами здесь

Олимпиадная задача по программированию. PascalABC.NET. Задача L. Переключение между окнами
Когда пользователь работает в операционной системе Winux, у него часто запущено несколько...

Васильев C# Глава 7 задача 8 (Просьба объяснить формулировку(задача внутри)
Текст задачи Напишите программу с классом, у которого есть текстовое поле. Значение текстовому...

Васильев C# Глава 8 задача 2 (Просьба объяснить формулировку(задача внутри)
Текст задачи Написать программу , в которой есть класс с полем, являющимся ссылкой на одномерный...

Задача со строками. Задача находится на фотке, которая прикреплена к сообщению
Фотку прикрепил к сообщению. П.5.4. Правил Запрещено создавать темы с бессмысленными названиями...

Задача при создание нового лида выводится задача от несущ.пользователя Б24
При создание нового Лида Выходит уведомление от пользователя которого нету в компаний. ...

Задача на k-тую цифру последовательности, задача на схему Горнера.
Ну, собственно опять прошу помощи... Задача 1: Определить k-тую цифру последовательности...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru