zoukankan      html  css  js  c++  java
  • 【递归与递推】计数器

    问题 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
  • 相关阅读:
    经典滤波器设计
    算法学习专栏简介
    算法学习专栏简介
    压缩感知及实验分析
    压缩感知及实验分析
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    查找searching
    查找searching
    《数学之美》之谈谈密码学
  • 原文地址:https://www.cnblogs.com/cshg/p/5641830.html
Copyright © 2011-2022 走看看