본문으로 바로가기
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
반응형