Автор | Сообщение |
|
Отправлено: 27.03.21 06:45. Заголовок: ege15 №191
Здравствуйте, Константин Юрьевич. Хотелось получить алгоритм решения в питоне, через множества, но получилось только через массивы: # ege15 №191 Q = [i for i in range(8,31)] P = [i for i in range(10,19)] A = set() k=0 for N in range(0,23): for R in range(0,9): if (P[R]%2 != 0)and(Q[N]%2 != 0 and P[R] == Q[N]): A.add(P[R]) k+=1 break print('A = ',A,'k = ',k) Подскажите, пожалуйста, алгоритм с помощью множеств Спасибо.
|
|
|
Ответов - 6
[только новые]
|
|
|
| Администратор
|
Сообщение: 2628
|
|
Отправлено: 27.03.21 13:51. Заголовок: s11kai пишет: Подска..
s11kai пишет: цитата: | Подскажите, пожалуйста, алгоритм с помощью множеств |
|
Например, так можно: P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) PandQodd = [x for x in P & Q if x % 2 == 1] print( PandQodd ) Но тут предварительно нужно получить формулу: Amin = P*Q.
|
|
|
|
Отправлено: 28.03.21 01:55. Заголовок: Спасибо, Константин ..
Спасибо, Константин Юрьевич. Красивый алгоритм, жаль только, что с помощью него не проверить, правильность формулы, полученной в ручном режиме. Видимо это тот случай, когда компьютер не является помощником - только ручки.
|
|
|
|
| Администратор
|
Сообщение: 2638
|
|
Отправлено: 28.03.21 18:53. Заголовок: s11kai пишет: Видимо..
s11kai пишет: цитата: | Видимо это тот случай, когда компьютер не является помощником - только ручки. |
|
Можно так: P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) A = set( x for x in U if ((x in P) <= (x in (U-Q))) == False ) print( len( [x for x in A if x % 2 == 1] ) ) Или вот так, если уж совсем "в лоб": P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) A = set() for x in U: if ((not x in A) <=((x in P) <= (x in (U-Q)))) == False: A.add(x) print( A ) print( len( [x for x in A if x % 2 == 1] ) )
|
|
|
|
Отправлено: 28.03.21 03:39. Заголовок: Константин Юрьевич, ..
Константин Юрьевич, прошу прощения что отвлекаю вас, разрешите последний вопрос. Поигрался с кодом и не смог понять, если в формуле будет отрицание, а код почему-то не воспринимает not: PandQodd = [x for x in P & not Q if x % 2 == 1] Спасибо.
|
|
|
|
| Администратор
|
Сообщение: 2637
|
|
Отправлено: 28.03.21 18:27. Заголовок: s11kai пишет: Поигра..
s11kai пишет: цитата: | Поигрался с кодом и не смог понять, если в формуле будет отрицание, а код почему-то не воспринимает not: PandQodd = [x for x in P & not Q if x % 2 == 1] |
|
А что такое NOT для множества? Это разница между универсальным множеством и данным множеством. Тогда нужно ввести универсальное множество. Но оно бесконечно, так как это множество всех целых чисел. Можно использовать частичное универсальное множество, которого достаточно для решения конкретной задачи. Например, так: P = set( range(10, 18+1) ) Q = set( range(8, 30+1) ) U = set( range(1000) ) PandQodd = [x for x in (P & (U-Q)) if x % 2 == 1] print( PandQodd )
|
|
|
|
Отправлено: 29.03.21 05:46. Заголовок: Спасибо, Константин ..
Спасибо, Константин Юрьевич, за подробное погружение в теорию. Вот теперь уже можно будет и экспериментировать с этими "жуткими" множествами.
|
|
|
|