0423 기초수학 4일차(~45)

박영선·2023년 4월 23일
0

팩토리얼

반복문 이용

#for 반복문 사용
inputN = int(input('n 입력: '))

result = 1

for n in range(1, inputN +1):
    result *=n

print('{}팩토리얼 : {}'.format(inputN,result))

#while 반복문 사용
result = 1
n=1

while n <= inputN:
    result *= n
    n +=1

print('{}팩토리얼 : {}'.format(inputN, result))

반복문 함수 이용

def facFun1(n):

    fac = 1
    for n in range(1,(n+1)):
        fac = fac * n

    return fac

num = int(input('input Number: '))
print(f'{num}! : {facFun1(num)}')

재귀함수 이용

def facFun2(n):

    if n ==1:
        return n
    return n * facFun2(n-1)

num = int(input('input Number: '))
print(f'{num}! : {facFun2(num)}')

군수열


flag = True
n=1 #군을 뜻함
nCnt=1 #항을 뜻함
searchNC = 0; searchNP= 0; sumN=0

while flag:
    for i in range(1,(n+1)):
        print(' {}/{} '.format(i, (n-i+1)),end='')

        sumN += (i/(n-i+1))
        nCnt +=1
        if sumN > 100:
            searchNC = i
            searchNP = n-i+1
            flag = False
            break
    print()
    n+=1

print('수열 합이 100을 초과하는 항, 값, 합 : {}항, {}/{}, {}'.format(nCnt, searchNC,searchNP,round(sumN,2)))

순열

일렬로 나열하는 경우의 수

numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))  #n개에서 r개 뽑기
result = 1

for n in range(numN,(numN-numR),-1):
    print('n : {}'.format(n))
    result = result * n

print('result : {}'.format(result))

1,2,3,4,5,6,7 카드 중 2,4,7 카드가 서로 이웃하는 경우의 수
2,4,7을 묶어서 보고 5에 대한 순열을 구하고
2,4,7 간의 순열을 구하면 된다.

5! X 3!

fNum1 = int(input('factorial1 : '))
fNum2 = int(input('factorial2 : '))
result1 = 1
result2 = 1

for n in range(fNum1,0,-1):
    result1 = result1*n
print('result1 : {}'.format(result1))

for n in range(fNum2,0,-1):
    result2 = result2*n
print('result2 : {}'.format(result2))

result3 = result1 * result2

조합

순서 상관없이 r개선택하기
nCr = (nPr / r!) = (n! / r!(n-r)!)
4C3 = 4P3 / 3!=> 432 / 123
4C3 = (4! / 3!(4-3)!) => 4321 / 32*1(1)

numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))

resultP =1
resultR = 1
resultC = 1

for n in range(numN,(numN-numR),-1): #순열구하기
    resultP = resultP * n
print('resultP : {}'.format(resultP))

for n in range(numR,0,-1):
    resultR = resultR *n
print('resultR : {}'.format(resultR))

resultC = resultP/resultR
print('resultC : {}'.format(int(resultC)))

1,2,3,4,5,6,7 카드 중 3,4,5가 동시에 선택되는 확률
7장 중 3장 뽑는 조합의 수 = 35개
3,4,5조합 = 1개
1/35 의 확률

result = (1/resultC)*100   #백분율 표시를 위해 곱하기 100
print('{}%'.format(round(result,2)))

확률

6장을 뽑는 사건 : 10C6
꽝 3장을 뽑는 사건 : 6C3
선물 3장 뽑는 사건 : 4C3
6C3 * 4C3 / 10C6 하면 확률이 나온다.

def proFun():
    numN = int(input('numN 입력: '))
    numR = int(input('numR 입력: '))

    resultP = 1
    resultR = 1
    resultC = 1

    #순열
    for n in range(numN, (numN-numR),-1):
        resultP = resultP * n
    print('resultP : {}'.format(resultP))
    #R!
    for n in range(numR, 0, -1):
        resultR = resultR * n
    print('resultR : {}'.format(resultR))
    #조합
    resultC = int(resultP/ resultR)
    print('resultC : {}'.format(resultC))

    return resultC

sample = proFun()
print('10장 중 6장: {}'.format(sample))

event1 = proFun()
print('꽝 6장 중 3장 : {}'.format(event1))

event2 = proFun()
print('선물 4장 중 3장 : {}'.format(event2))

probability = (event1*event2)/sample
print('확률 : {}%'.format(round(probability*100,2)))
profile
데이터분석 공부 시작했습니다

0개의 댓글