728x90
반응형
[17번 문제]
1부터 5까지의 숫자를 영어로 쓰면 one, two, three, four, five 이고,
각 단어의 길이를 더하면 3 + 3 + 5 + 4 + 4 = 19 이므로 사용된 글자는 모두 19개입니다.
1부터 1,000까지 영어로 썼을 때는 모두 몇 개의 글자를 사용해야 할까요?
참고: 빈 칸이나 하이픈('-')은 셈에서 제외하며, 단어 사이의 and 는 셈에 넣습니다.
예를 들어 342를 영어로 쓰면 three hundred and forty-two 가 되어서 23 글자,
115 = one hundred and fifteen 의 경우에는 20 글자가 됩니다.
[코드]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | #include "stdafx.h" #include <stdlib.h> #include <iostream> using namespace::std; int list[1001] = {0}; int ans = 0; int main() { list[1] = 3; list[2] = 3; list[3] = 5; list[4] = 4; list[5] = 4; list[6] = 3; list[7] = 5; list[8] = 5; list[9] = 4; list[10] = 3; list[11] = 6; list[12] = 6; list[13] = 8; list[14] = 8; list[15] = 7; list[16] = 7; list[17] = 9; list[18] = 8; list[19] = 8; list[20] = 6; list[30] = 6; list[40] = 5; list[50] = 5; list[60] = 5; list[70] = 7; list[80] = 6; list[90] = 6; list[100] = 10; list[1000] = 11; int temp ; for (int i = 1; i <= 1000; i++) { if (list[i] == 0) { temp = i; if (i < 100) { temp /= 10; temp *= 10; list[i] = list[temp] + list[i % 10]; } else { if (i % 100 == 0) list[i] += list[i / 100] + list[100] - list[1]; else { list[i] += 3; temp /= 100; temp *= 100; list[i] += list[temp] + list[i % 100]; } } } ans += list[i]; } for (int i = 1; i <= 1000; i++) { cout << list[i] << " "; if (i % 10 == 0) cout << endl; if (i % 100 == 0) cout << endl; } cout << endl << ans << endl; system("pause"); return 0; } | cs |
728x90
반응형
'Solution > Project Euler' 카테고리의 다른 글
[19/C++] 20세기에서, 매월 1일이 일요일인 경우는 몇 번? (0) | 2018.05.26 |
---|---|
[18/C++] 삼각형을 따라 내려가면서 합이 최대가 되는 경로 찾기 (0) | 2018.05.26 |
[16/C++] 2^1000의 각 자리수를 모두 더하면? (0) | 2018.05.25 |
[15/C++] 20×20 격자의 좌상단에서 우하단으로 가는 경로의 수 (0) | 2018.05.25 |
[14/C++] 백만 이하로 시작하는 우박수 중 가장 긴 과정을 거치는 것은? (0) | 2018.05.25 |