• 【递归与递推】计数器


    问题 F: 【递归与递推】计数器

    题目描述

    一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0,1,2,…,9。其中—个页码不含多余的0,如N=1234时第5页不是0005,只是5。

    输入

    一个正整数N(N≤109),表示总的页码。

    输出

    共十行:第k行为数字k-1的个数。

    样例输入

    11
    

    样例输出

    1
    4
    1
    1
    1
    1
    1
    1
    1
    1
    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <cmath>
    using namespace std;
    int b[10], c[10], f[10], m;
    void slove() {
     
        int M = m, n = 0;
        while(M > 0){
            n++;
            M /= 10;
        }
        b[0] = 1;
        for(int i = 1; i <= 9; i++) {
            b[i] = 10 * b[i - 1];
        }
        M = m;
        for(int i = 0; i < n; i++){
            c[i] = M % 10;
            M = M / 10;
        }
        for(int i = 0; i <= 9 ; i++){
            f[i] = 0;
        }
     
        for(int i = n-1; i >= 1; i--) {
                for(int k = 0; k <= 9; k++){
                    f[k] += b[i-1]*i*c[i];
                    if (k < c[i]) f[k] += b[i];
                   if(c[i] == k) f[k] += m % b[i] + 1;
                }
        }
        for(int k = 0; k <= 9; k++) {
            if (k <= c[0]) f[k] += 1;
        }
        for(int i = 0; i < n; i++){
            f[0] -= b[i];
        }
    //    for(int i = n-1; i >= 1; i--){
    //        for(int k = 0; k <= 9; k++)
    //        f[k] += n % b[i];
    //    }
        for(int i = 0; i <= 9; i++){
            printf("%d
    ", f[i]);
        }
     
    }
    int main() {
        cin >> m;
        slove();
        return 0;
    }
    View Code
  • 相关阅读:
    C++头文件相互引用,最好一个#include,另一个class C;
    Git 安装配置
    loadrunner字符串赋值
    loadrunner 调用外部dll
    redis启动、清缓存命令
    solr-6.4.1 学习安装与配置 和 Elasticsearch(1.5.2)学习文档
    分页
    JS原型理解
    angular2 依赖注入新坑。
    javascript数组传值与地址。
  • 原文地址:https://www.cnblogs.com/cshg/p/5641830.html
Copyright © 2020-2023  润新知