天天看点

HDU 5867 Water problem

Problem Description

If the numbers 1 to 5 are written out in words: one, two, three, four, five, then there are 3+3+5+4+4=19 letters used in total.If all the numbers from 1 to n (up to one thousand) inclusive were written out in words, how many letters would be used?

Do not count spaces or hyphens. For example, 342 (three hundred and forty-two) contains 23 letters and 115 (one hundred and fifteen) contains 20 letters. The use of "and" when writing out numbers is in compliance with British usage.

Input

There are multiple test cases. The first line of input contains an integer T, indicating the number of test cases.

For each test case: There is one positive integer not greater one thousand.

Output

For each case, print the number of letters would be used.

Sample Input

3

1

2

3

Sample Output

3

6

11

简单题,把各个英文单词数对就ok了

#include<set>
#include<map>
#include<ctime>
#include<cmath>
#include<stack>
#include<queue>
#include<bitset>
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<functional>
#define rep(i,j,k) for (int i = j; i <= k; i++)
#define per(i,j,k) for (int i = j; i >= k; i--)
#define loop(i,j,k) for (int i = j;i != -1; i = k[i])
#define lson x << 1, l, mid
#define rson x << 1 | 1, mid + 1, r
#define fi first
#define se second
#define mp(i,j) make_pair(i,j)
#define pii pair<int,int>
using namespace std;
typedef long long LL;
const int low(int x) { return x&-x; }
const double eps = 1e-8;
const int INF = 0x7FFFFFFF;
const int mod = 1e9 + 7;
const int N = 2e5 + 10;
const int read()
{
    char ch = getchar();
    while (ch<'0' || ch>'9') ch = getchar();
    int x = ch - '0';
    while ((ch = getchar()) >= '0'&&ch <= '9') x = x * 10 + ch - '0';
    return x;
}
int T, n, m, cnt[N];
int f[20] = { 0,3,3,5,4,4,3,5,5,4,3,6,6,8,8,7,7,9,8,8 };
int g[10] = { 0,0,6,6,5,5,5,7,6,6 };

int count(int x)
{
    if (x == 1000) return 11;
    int res = 0;
    if (x / 100)
    {
        res += f[x / 100] + 7;
        if (x % 100) res += 3;
        x %= 100;
    }
    if (x > 19)
    {
        res += g[x / 10] + f[x % 10];
    }
    else
    {
        res += f[x];
    }
    return res;
}

int main()
{
    cnt[0] = 0;
    rep(i, 1, 1000) cnt[i] = cnt[i - 1] + count(i);
    T = read();
    while (T--)
    {
        scanf("%d", &n);
        printf("%d\n", cnt[n]);
    }
    return 0;
}      
上一篇: STL 的容器
下一篇: GDB用法(zz)