统计数字

Time Limit: 3 second
Memory Limit: 2 MB

【问题描述】

一本书的页数为N,页码从1开始编起,请你求出全部页码中,用了多少个0、1、2、3、4、5、6、7、8、9。其中每个页码不含多余的0,如N=123时,第5页不是005,只是5,第12页不是012,只是12。

【输入】

输入文件仅一行,一个正整数N(N≤109),表示总的页码数。

【输出】

输出文件十行,第K行为数字k-1的个数,即第一行为数字0的个数,第二行为数字1的个数,第三行为数字2的个数,以此类推。

【输入样例】

11

【输出样例】

1
4
1
1
1
1
1
1
1
1
 

【题解】

这题很恶心,没错 又是恶心这个词,以后只可能会越来越多地出现这个词。不会减少。。。

我是看着题解写的程序。

首先,从000-999 我们不要删掉多余的0,那么我们会有1000个3位数,然后一共有3000个数字出现过,可以想想0-9,每个数字都只出现一次,00-99,也可以知道0-9每个数字都出现相同的次数。推广一下,000-999每个数字出现的次数也是一样的。

然后3000个数字,0-9有10个,则每个数字都有用到300次。

先别问我0的事!

然后我们举个例子。

6147

我们先看6,6之前有0-5,后3位,都从000-999变化,刚才我们算出来了,每个数字都会用到300次,0-5有6位,所以a[0..9]+=6*300;

然后是0-5这6个数字作为第一位,每个都出现过1000次,即0XXX 1XXX 2XXX...其中XXX ∈ [000,999];

最后是6,6我们要单独处理,要加上148,即6XXX,XXX∈[000..148];

然后处理1,4,7就好。

(这里你用while已经能写出来了,只要按照6的规律就可以)

接下来是0的问题了。

先从只有一位数的情况开始。

比如6;

我们先会看看6后面有没有数字,没有。

然后看看6前面有没有数字,有。要加上几呢? 假设l是数字的长度,我们肯定会这样做的

t = 1

for (int i = 1; i<=l-1;i++)

t = t *10;

这里如果是上面说的6174,l=4,则t=1000;

但是这里我们是以6为例,所以t = 1;

然后for (int i = 0;i <=5;i++)

a[i]+=t;

这里已经多出来一个0了。

剩下步骤省略。。

対,如果一位数字会多出1个0;

两位数。

比如12

我们先会看1后面有没有数字,有。

那就用下我们上面的公式。

0-9有10个一位数字。。。。然后每个数字被用一次。

则a[0..9]+=1;

//这里出现的0是多出的。

然后是0 被用了 10 次 0-9,

//这里的0也是多出来的。即00 01 02 03...09;

这里出现了11个多余的0

剩下步骤省略,因为没有出现多余的0.

111

1111

即多出的0是数字的位数。

【代码】

#include <cstdio>
#include <iostream>
#include <string>using namespace std;string s1;
unsigned int n;
int a[10];void input_data()
{cin >> s1;
}void get_ans()
{int l = s1.size(); //先获取数据的长度for (int i = 0;i <= 9;i++) //每个数字使用的数目初始化a[i] = 0;int t = 0;for (int i = 1;i <= l;i++) //先减去多余的0,即l(字母L)个1(数字1)t = t*10 + 1;a[0] -= t; //减去多余的0while (l > 0) //如果还能继续减少长度 基本上写出第一层第二层就不会有问题了。{int m = s1[0] - '0'; //先取出头数字t = 1;for (int i = 1;i <= l-1;i++) //这里是6174中 6时的1000t = t * 10;int tt = (t * (l-1))/10; //000 - 999 中每个数字被使用的次数 while进行一次就变成00-99for (int i = 1;i <= m;i++) //0XXX 1XXX 2XXX 。。。。mXXX 中的 XXXfor (int j = 0;j <= 9;j++)a[j] += tt;for (int i = 0;i <= m-1;i++) //0XXX 1XXX 2XXX ... mXXX中的 1..ma[i] += t;s1 = s1.erase(0,1); //这是从int ttt =0;l = s1.size();for (int i = 0;i <l;i++)ttt = ttt*10 + s1[i] - '0';ttt++;a[m] += ttt; //这是统计6147 中的148.}}void output_ans()
{for (int i = 0 ;i <= 9;i++)printf("%d\n",a[i]);
}int main()
{input_data();get_ans();output_ans();return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/7632451.html

【3006】统计数字相关推荐

  1. C语言case次数有限制吗,用switch...case语句统计数字、空格和其他字符出现的次数...

    //用switch...case语句统计数字.空格和其他字符出现的次数 //转自K&R #include int main(void) { int c, i, nwhite, nother, ...

  2. 统计数字,空白符,制表符_为什么您应该在HTML中使用制表符空间而不是多个非空白空间(nbsp)...

    统计数字,空白符,制表符 There are a number of ways to insert spaces in HTML. The easiest way is by simply addin ...

  3. 算法设计原则验证实验报告_算法设计与分析实验报告 统计数字问题

    一 . 实验要求 1 .掌握算法的计算复杂性概念. 2 .掌握算法渐近复杂性的数学表述. 3 .掌握用 C++ 语言描述算法的方法. 4 .实现具体的编程与上机实验,验证算法的时间复杂性函数. 二 . ...

  4. 第十七期:2019人工智能统计数字和一些重要事实

    人工智能(AI)每天在以惊人的速度发展.这项技术在2018年已经取得了巨大的成功,简化医疗保健业的工作流程,降低制造业的间接费用,并减少教育业的行政工作量.现在是2019年,每天似乎都有一家新的AI初 ...

  5. java常用的统计_(OJ)Java常用类-统计数字次数

    统计数字次数 Problem Description 命令行输入一个由数字组成的任意字符串,统计出每个数字出现的次数. Input Description 1239586838 Output Desc ...

  6. 信息学奥赛一本通(1239:统计数字)

    1239:统计数字 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 6439     通过数: 2627 [题目描述] 某次科研调查时得到了n个自然数,每个数均不超 ...

  7. Vijos P1816 统计数字【序列处理】

    描述 某次科研调查时得到了n个自然数,每个数均不超过1500000000(1.5*10^9).已知不相同的数不超过10000个,现在需要统计这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计 ...

  8. c语言统计出现个数,C语言统计数字出现的个数

    程序功能:统计数字出现的个数 例如:输入1 2 3 1 2 4 2 3 1 输出:1 3 2 3 3 2 4 1 能看懂吗?就是1出现3次,2出现3次,3出现2次,4出现1次 #define M 50 ...

  9. 统计数字问题Python

    问题描述 统计数字问题:一本书的页码从自然数1开始顺序编码直到自然数n.书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0.例如第6页用6表示而不是06或006.数字统计问题要求对给定书的总页 ...

最新文章

  1. numpy中矩阵运算的特点
  2. js、css的阻塞问题
  3. linux sh文件case,Shell脚本case语句简明教程
  4. Linux的vim编辑器中的翻页命令
  5. 设计方案,拿来吧你!
  6. android学习之-Style样式的定义
  7. 好用的电脑录屏软件!来看看这几款!
  8. 【系统分析师之路】第十七章 复盘多媒体基础知识
  9. 单片机初始化WIFI模块
  10. 测试报告包含哪些内容?
  11. html tr行内样式左对齐,探索CSS单行文字居中,多行文字居左的实现方式
  12. OpenERP/Odoo的架构
  13. Python课堂作业(用于复习)
  14. 鼠标划动网页或者窗口时进度条总是上下乱跳,有可能是你的上下按键坏掉了
  15. iOS app添加桌面快捷方式
  16. 改变linux字体的大小,如何更改字体并调整其大小?
  17. 整车电源状态 K15 KL30 KL31
  18. 人和人之间的距离有多远
  19. 前端开发常用编辑器,你用过哪几个?
  20. python中find函数是什么意思_find函数什么意思

热门文章

  1. MHA高可用主从复制实现
  2. Leetcode 62. Unique Paths
  3. 代码实现把字符串反转
  4. 移动端给img加上max-width:100%
  5. SQL Prompt 5.1使用
  6. POJ 2336 Ferry Loading II 动态规划
  7. 禅道项目管理软件的命令行入口
  8. 在GridView里使用上下箭头(小键盘旁边)来选择记录
  9. 图像识别工程师 VS The application has requested the Runtime to terminate it in an unusual way.
  10. unity3d Update()和FixedUpdate()的区别