美文网首页
欧拉计划 17

欧拉计划 17

作者: Plutorres | 来源:发表于2021-07-24 23:25 被阅读0次

Number letter counts

题目描述

英文表示 [1, 1000] 需要使用多少字母(不包括空格与连接符)

思路

一步步简化问题,先单独处理 1000

三位数:
百位数字的长度 + handred 长度
非整百还需要加上 and 长度

两位数和一位数:
若小于 20,两个数位一起计算
否则拆成两个数位,分别计算所占长度

数组的设计和函数的写法有诸多取巧之处,自己都觉得很神奇

代码

#include <cstdio>

int a[28] = {0, 3, 3, 5, 4, 4, 3, 5, 5, 4, 3,  // // 第一行:[0, 10]
                6, 6, 8, 8, 7, 7, 9, 8, 8, 6,  // 第二行:[11, 20]
                6, 5, 5, 5, 7, 6, 6};  // 第三行:[30, 90]
int d[3];
int ans = 11; // one thousand

void nex() {
    if (++d[0] < 10) return;
    d[0] = 0;
    if (++d[1] < 10) return;
    d[1] = 0;
    d[2]++;
}

int get() {
    int k = !!d[2] * 7 + a[d[2]];
    if (d[2] && (d[1] || d[0])) k += 3;
    
    if (d[1] <= 1) k += a[d[1] * 10 + d[0]];
    else k += a[20 - 2 + d[1]] + a[d[0]];
    return k;
}

int main() {
    for (int i = 0; i < 1000; i++, nex()) {
        ans += get();
    }
    printf("%d\n", ans);
    return 0;
}

相关文章

  • 欧拉计划 17

    Number letter counts[https://projecteuler.net/problem=17]...

  • 欧拉计划 21

    Amicable numbers[https://projecteuler.net/problem=21] 题目描...

  • 欧拉计划 26

    Reciprocal cycles[https://projecteuler.net/problem=26] 题目...

  • 欧拉计划 23

    Non-abundant sums[https://projecteuler.net/problem=23] 题目...

  • 欧拉计划 9

    Special Pythagorean triplet[https://projecteuler.net/prob...

  • 欧拉计划 12

    Highly divisible triangular number[https://projecteuler.n...

  • 假如用MC大片的形式来打开同学之间打架

    “欧拉欧拉欧拉欧拉欧拉欧拉欧拉……” “啊哒哒哒哒哒哒哒哒哒哒哒……” “你们在干嘛呀喂...

  • 第一天

    utellm I said lololololol 欧拉欧拉欧拉欧拉 wryyyyyyyyyyyyyyy

  • 欧拉计划1~10

    目前使用的是python2,以后有其他学习计划再更新其他语音的代码。 一般情况下,顺序为英文原题——中文翻译——代...

  • 欧拉回路

    欧拉通路与欧拉回路 欧拉通路: 对于图G来说,如果存在一条通路包含G中所有的边,则该通路成为欧拉通路,也称欧拉路径...

网友评论

      本文标题:欧拉计划 17

      本文链接:https://www.haomeiwen.com/subject/cmasmltx.html