Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #! /usr/bin/python
- # -*- coding: utf-8 -*-
- try:
- xrange
- except NameError:
- xrange = range
- def format(f):
- if f >= 1 or f == 0:
- s = '%.2f' % f
- if not (99 <= f < 100):
- return s
- s = '%.40f' % f
- return s[: len(s) - len(s.lstrip('9.')) + 2]
- else:
- s = '%.40f' % f
- if f < 0:
- return s
- assert s.startswith('0.')
- return '%%.%df' % (len(s) - len(s.lstrip('0.')) + 2) % f
- def calc(n=36):
- choose = [[1]]
- while len(choose) <= 36:
- choose.append([1] + [(choose[-1][i] + choose[-1][i - 1])
- for i in xrange(1, len(choose))] + [1])
- r = 0
- rkind = [0] * 5
- n41 = n // 4 + 1
- rall = [0] * n41
- n1 = n + 1
- for a in xrange(n1):
- ca = choose[n][a]
- n1a = n1 - a
- for b in xrange(n1a):
- cb = choose[n - a][b]
- cab = ca * cb
- n1ab = n1a - b
- for c in xrange(n1ab):
- cc = choose[n - a - b][c]
- d = n - a - b - c
- cabcd = cab * cc
- r += cabcd
- rkind[(a > 0) + (b > 0) + (c > 0) + (d > 0)] += cabcd
- for i in xrange(1, n41):
- if a >= i and b >= i and c >= i and d >= i:
- rall[i] += cabcd
- rall[0] = r
- assert r == 4 ** n
- assert rkind[0] == 0
- assert rall[1] == r - rkind[3] - rkind[2] - rkind[1]
- assert n % 4 != 0 or rall[n // 4] == (
- choose[n][n // 4] * choose[n // 4 * 3][n // 4] *
- choose[n // 4 * 2][n // 4])
- rf = r / 100.
- for i in xrange(1, 5):
- print('Annak a valószínűsége, hogy %d fajta van a dobozban: kb. %s%%' %
- (i, format(rkind[i] / rf)))
- for i in xrange(1, n41):
- if i == n // 4:
- msg = '%d van' % i
- else:
- msg = 'van legalább %d' % i
- print('Annak a valószínűsége, hogy minden fajtából %s: '
- 'kb. %s%%' % (msg, format(rall[i] / rf)))
- print('Minden ennyiedik esetben lesz hiányzó fajta: %s' %
- format(r / (r - rall[1] + 0.) + .5))
- calc()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement