프로젝트 오일러 문제 17 :
1에서 5까지의 숫자가 1, 2, 3, 4, 5와 같이 단어로 쓰여지면 3 + 3 + 5 + 4 + 4 = 총 19 개의 문자가 사용됩니다.
1부터 1000 (1,000)까지의 모든 숫자를 단어로 작성하면 몇 개의 문자가 사용됩니까?
참고 : 공백이나 하이픈은 계산하지 마십시오. 예를 들어, 342 (3 백사 십이)는 23 개의 문자를 포함하고 115 (백 십오)는 20 개의 문자를 포함합니다. 숫자를 쓸 때 "and"를 사용하는 것은 영국식 사용법을 따릅니다.
무작위로 생성 된 숫자로 내 코드를 테스트 할 때마다 해당 숫자를 단어로 작성하면 올바른 문자 수를 출력합니다. 그러나 제공된 테스트 케이스로 실행하려고 할 때 내 대답이 잘못되었습니다. 답변 : 18451
Words = {0: "", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine", 10:"ten", 11:"eleven", 12:"twelve", 13:"thirteen", 14:"fourteen", 15:"fifteen", 16:"sixteen",17:"seventeen", 18:"eighteen", 19:"nineteen", 20:"twenty", 30:"thirty", 40:"forty", 50:"fifty", 60:"sixty", 70:"seventy", 80:"eighty", 90:"ninety", 100:"onehundred", 200:"twohundred", 300:"threehundred", 400:"fourhundred", 500:"fivehundred", 600:"sixhundred", 700:"sevenhundred", 800:"eighthundred", 900:"ninehundred", 1000:"onethousand"}
count = 0
for i in range(1, 1001):
c = 1
arr = []
if(i<=20 or (len(str(i))==2 and i%10==0)):
count += len(Words.get(i))
elif(i%100==0):
count += len(Words.get(i))
else:
while(i!=0):
z = i%10
arr.append(z*c)
i = i//10
c*=10
if(len(arr)==3 and arr[1]==10):
arr[1]=arr[1]+arr[0]
arr[0]=0
for f in arr:
count+=len(Words.get(f))
print(count)
귀하의 코드를 디버깅했습니다. 질문에서 115 (1 백 15)에는 20 개의 문자가 있다고 언급했지만 코드에서 "and"를 고려하지 않았기 때문에 프로그램은 17 개로 계산됩니다. 모든 "and"를 포함하면 891 * 3 + 18451 = 21124가 표시됩니다. 내가 수학으로 착각하지 않기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다