✍🏻 17일 공부이야기.
n번째 항까지의 합을 출력하는 프로그램을 완성해라
inputa1 = int(input('a1 입력 : '))
inputD = int(input('공차 입력 : '))
inputN = int(input("n 입력 : "))
valueN = 0 #n번쨰 항의 값
sumN = 0 #n번쨰 항까지의 합
n = 1
print("처음부터 끝까지 수열들을 더하는 방법")
while n <= inputN: #n번째 항까지
if n == 1: #n이 1일 때는
valueN = inputa1
sumN += valueN #a1을 sumN에 더해주고
print(f'{n}번째 항까지의 합 : {sumN}')
n += 1
continue
#2번째 항부터 n번째 항까지는
valueN += inputD #공차를 더한 값들을
sumN += valueN #계속 더해줌
print(f"{n}번째 항까지의 합 : {sumN}")
n += 1
print(f"{inputN}번째 항까지의 합 : {sumN}")
#등차수열 합 공식 : sn = n(a1 + an) / 2
print("등차수열 합 공식을 이용한 방법")
valueN = inputa1 + (inputN - 1)*inputD
sumN = inputN * (inputa1 + valueN) / 2
print(f"{inputN}번째 항까지의 합 : {int(sumN)}")
💻 출력
a1 입력 : 5
공차 입력 : 4
n 입력 : 5
처음부터 끝까지 수열들을 더하는 방법
1번째 항까지의 합 : 5
2번째 항까지의 합 : 14
3번째 항까지의 합 : 27
4번째 항까지의 합 : 44
5번째 항까지의 합 : 65
5번째 항까지의 합 : 65
등차수열 합 공식을 이용한 방법
5번째 항까지의 합 : 65
등비수열 : 연속된 두 항의 비가 일정한 수열
등비중항 : 연속된 세 항에서의 가운데 항
n번째 항의 값을 출력하는 프로그램을 완성해라
inputa1 = int(input('a1 입력 : '))
inputR = int(input('공비 입력 : '))
inputN = int(input("n 입력 : "))
an = 0
n = 1
while n <= inputN:
if n == 1:
an = inputa1
print(f'{n}번째 항의 값 : {an}')
n += 1
continue
an *= inputR
print(f'{n}번째 항의 값 : {an}')
n += 1
print(f'{inputN}번째 항의 값 : {an}')
##an = a1 * r^(n-1)을 이용하는 방법
#an = inputa1 * (inputR ** (inputN -1))
💻 출력
a1 입력 : 2
공비 입력 : 2
n 입력 : 7
1번째 항의 값 : 2
2번째 항의 값 : 4
3번째 항의 값 : 8
4번째 항의 값 : 16
5번째 항의 값 : 32
6번째 항의 값 : 64
7번째 항의 값 : 128
7번째 항의 값 : 128
n번째 항까지의 합을 출력하는 프로그램을 완성해라
inputa1 = int(input('a1 입력 : '))
inputR = int(input('공비 입력 : '))
inputN = int(input("n 입력 : "))
valueN = 0
sumN = 0
n = 1
print("처음부터 끝까지 수열들을 더하는 방법")
while n <= inputN:
if n == 1:
valueN = inputa1
sumN += valueN
print(f'{n}번째 항까지의 합 : {sumN}')
n += 1
continue
valueN *= inputR
sumN += valueN
print(f"{n}번째 항까지의 합 : {sumN}")
n += 1
print(f"{inputN}번째 항까지의 합 : {sumN}")
#등비수열 합 공식 : sn = a1 * (1 - (r^n)) / (1 - r)
print("등비수열 합 공식을 이용한 방법")
sumN = inputa1 * (1 - (inputR ** inputN)) / (1 - inputR)
print(f"{inputN}번째 항까지의 합 : {int(sumN)}")
💻 출력
a1 입력 : 5
공비 입력 : 3
n 입력 : 7
처음부터 끝까지 수열들을 더하는 방법
1번째 항까지의 합 : 5
2번째 항까지의 합 : 20
3번째 항까지의 합 : 65
4번째 항까지의 합 : 200
5번째 항까지의 합 : 605
6번째 항까지의 합 : 1820
7번째 항까지의 합 : 5465
7번째 항까지의 합 : 5465
등비수열 합 공식을 이용한 방법
7번째 항까지의 합 : 5465
파이썬으로 구해보면 아래와 같다.
# an = {3, 7, 13, 21, 31, 43, 57}
# bn = 4, 6, 8, 10, 12, 14
inputAN1 = int(input("a1 입력 : "))
inputAN = int(input("n 입력 : "))
inputBN1 = int(input("b1 입력 : "))
inputBD = int(input("bn 공차 입력 : "))
valueAN = 0
valueBN = 0
n = 1
while n <= inputAN:
if n == 1:
valueAN = inputAN1
valueBN = inputBN1
print(f'an의 {n}번째 항의 값 : {valueAN}')
print(f'bn의 {n}번째 항의 값 : {valueBN}')
n += 1
continue
valueAN += valueBN
valueBN += inputBD
print(f'an의 {n}번째 항의 값 : {valueAN}')
print(f'bn의 {n}번째 항의 값 : {valueBN}')
n += 1
print(f'an의 {inputAN}번째 항의 값 : {valueAN}')
print(f'bn의 {inputAN}번째 항의 값 : {valueBN}')
💻 출력
a1 입력 : 3
n 입력 : 7
b1 입력 : 4
bn 공차 입력 : 2
an의 1번째 항의 값 : 3
bn의 1번째 항의 값 : 4
an의 2번째 항의 값 : 7
bn의 2번째 항의 값 : 6
an의 3번째 항의 값 : 13
bn의 3번째 항의 값 : 8
an의 4번째 항의 값 : 21
bn의 4번째 항의 값 : 10
an의 5번째 항의 값 : 31
bn의 5번째 항의 값 : 12
an의 6번째 항의 값 : 43
bn의 6번째 항의 값 : 14
an의 7번째 항의 값 : 57
bn의 7번째 항의 값 : 16
an의 7번째 항의 값 : 57
bn의 7번째 항의 값 : 16
물론, 이 문제 또한 위에서 구한 것과 같이 일반항을 구해서 수식을 입력해줘도 구할 수 있다 :)
피보나치 수를 계산하는 프로그램을 완성해라.
inputN = int(input('n 입력 : '))
valueN = 0 #n번째 항의 값
sumN = 0 #n번째 항까지의 합
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
if n == 1 or n == 2: #첫번째 항과 두번째 항은 값이 1임
valueN = 1
valuePreN2 = valueN
valuePreN1 = valueN
sumN += valueN
print(f'{n}번째 항의 값 : {valueN}')
n += 1
else:
valueN = valuePreN2 + valuePreN1 #피보나치수열 특징
valuePreN2 = valuePreN1
valuePreN1 = valueN
sumN += valueN
print(f'{n}번째 항의 값 : {valueN}')
n += 1
print(f'{inputN}번째 항의 값 : {valueN}')
print(f'{inputN}번째 항까지의 합 : {sumN}')
💻 출력
n 입력 : 5
1번째 항의 값 : 1
2번째 항의 값 : 1
3번째 항의 값 : 2
4번째 항의 값 : 3
5번째 항의 값 : 5
5번째 항의 값 : 5
5번째 항까지의 합 : 12
inputN = int(input("n 입력 : "))
#반복문을 이용하는 방법(for문, while문)
result = 1
for n in range(1, inputN + 1):
result *= n
print("for문을 이용하는 방법")
print(f'{inputN} 팩토리얼 : {result}')
result = 1
n = 1
while n <= inputN:
result *= n
n += 1
print("while문을 이용하는 방법")
print(f'{inputN} 팩토리얼 : {result}')
#재귀함수를 이용하는 방법
def factorial(n):
if n == 1:
return 1
return n * factorial(n-1)
print("재귀함수를 이용하는 방법")
print(f'{inputN} 팩토리얼 : {factorial(inputN)}')
##math 모듈을 사용하는 방법
#import math
#math.factorial(inputN)
💻 출력
n 입력 : 5
for문을 이용하는 방법
5 팩토리얼 : 120
while문을 이용하는 방법
5 팩토리얼 : 120
재귀함수를 이용하는 방법
5 팩토리얼 : 120
다음 수열 {1, 1, 2, 1, 2, 3, 1, 2, 3, 4, 1, 2, 3, 4, 5, ...}의 n번째 항의 값을 출력하는 프로그램을 완성해라.
#1, 1, 2, 1, 2, 3, 1, 2, 3, 4, ...
inputN = int(input('n 입력 : '))
flag = True
n = 1
nCnt = 1 #n번째 항
searchN = 0 #n번째 항의 값
while flag:
for i in range(1, n+1): #군
print(f'{i} ', end = '')
nCnt += 1
if nCnt > inputN: #사용자가 원하는 n번째 항의 순서가 왔다면
searchN = i #n번째 항의 값은 i가 된다.
flag = False
break
print() #군이 바뀌면 줄바꿈을 해준다
n += 1
print(f'{inputN}항 : {searchN}')
💻 출력
n 입력 : 17
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2
17항 : 2
다음 수열 {1/1, 1/2, 2/1, 1/3, 2/2, 3/1, 1/4, 2/3, 3/2, 4/1, ...}의 n번째 항의 값을 출력하는 프로그램을 완성해라.
inputN = int(input('n 입력 : '))
flag = True
n = 1
nCnt = 1
searchNC = 0 #분자
searchNP = 0 #분모
while flag:
for i in range(1, n+1):
print(f'{i}/{(n - i + 1)} ',end = '')
nCnt += 1
if nCnt > inputN:
searchNC = i
searchNP = n - i + 1
flag = False
break
print()
n += 1
print(f"{inputN}항 : {searchNC}/{searchNP} ")
💻 출력
n 입력 : 9
1/1
1/2 2/1
1/3 2/2 3/1
1/4 2/3 3/2
9항 : 3/2
numN = int(input('numN 입력 : '))
numR = int(input('numR 입력 : '))
result = 1
#n(n-1)(n-2)...(n-r+1)을 이용한 방법
for n in range(numN, numN-numR, -1):
print(f'n : {n}')
result *= n
print(f'result = {result}')
#n! / (n-r)!를 이용한 방법
import math
print(f'result with factorial : {math.factorial(numN) / math.factorial(numN - numR)}')
💻 출력
numN 입력 : 7
numR 입력 : 5
n : 7
n : 6
n : 5
n : 4
n : 3
result = 2520
result with factorial : 2520.0
n = int(input('n 입력 : '))
result = 1
for i in range(1, n):
result *= i
print(f'result : {result}')
💻 출력
n 입력 : 4
result : 6
numN = int(input("numN 입력 : "))
numR = int(input("numR 입력 : "))
resultP = 1
resultR = 1
resultC = 1
for n in range(numN, numN-numR, -1): #분자
print(f'n1 : {n}')
resultP *= n
print(f'resultP = {resultP}')
for n in range(numR, 0, -1): #분모
print(f'n2 : {n}')
resultR *= n
print(f'resultR = {resultR}')
resultC = int(resultP / resultR)
print(f'resultC = {resultC}')
💻 출력
numN 입력 : 8
numR 입력 : 3
n1 : 8
n1 : 7
n1 : 6
resultP = 336
n2 : 3
n2 : 2
n2 : 1
resultR = 6
resultC = 56
너무 좋은 글이네요. 공유해주셔서 감사합니다.