题意:

  统计两个整数a,b之间各个数字(0~9)出现的次数,如1024和1032,他们之间的数字有1024 1025 1026 1027 1028 1029 1030 1031 1032 总共有10个0,10个1,3个3等等。

分析:

  因为前导0的干扰,为了计算方便暂时都先计算在内,之后再减;

  如果是0~199,那么百位上的0和1各出现一次,s剩下的就是两个00~99,总共两百个二位数,而每个数出现的次数都一样,都是2*(99-00+1)/10;

  那么任意的数都可以分解成类似的数字,如3426,则可以分成0000~2999,3000~3399,3400~3419,3420~3426几个部分各自计算,再求和按位减去前导0的个数。

#include <iostream>
#include <cstdio>using namespace std;/*** 计算从0到s字符串所代表的数字中0~9各个数字出现的次数..**/
void cal(char s[], int num[]) {int i, j, k, n, t, m = atoi(s);//atoi(s).把字符串转换成整型数。ASCII to integer 的缩写。n = (int) strlen(s);for (i = k = 1; i < n; i++)k *= 10, num[0] -= k;for (i = 0; i < n; i++, k /= 10) {for (j = 0; j < s[i] - '0'; j++)num[j] += k;for (t = 0; t < 10; t++)num[t] += k / 10 * (n - i - 1) * j;if (i + 1 < n)num[j] += atoi(s + i + 1);num[j]++;}
}int main() {int n, m;int a[11], b[11];char str[25];while (scanf("%d%d", &n, &m) != EOF, n || m) {memset(a, 0, sizeof(a));memset(b, 0, sizeof(b));if (n > m) {int temp = n;n = m;m = temp;}/*** 函数功能:把格式化的数据写入某个字符串* 函数原型:int sprintf( char *buffer, const char *format [, argument] … );* 返回值:字符串长度(strlen)*例子:*char* who = "I";*char* whom = "CSDN";*sprintf(s, "%s love %s.", who, whom); //产生:"I love CSDN. "  这字符串写到s中*sprintf(s, "%10.3f", 3.1415626); //产生:" 3.142"*/sprintf(str, "%d", n - 1); //将格式化的数据写入某个字符串cal(str, a);sprintf(str, "%d", m);cal(str, b);int i;for (i = 0; i < 10; ++i) {printf("%d ", b[i] - a[i]);}printf("\n");}return 0;
}

(Realx 数论1.28)POJ 2282 The Counting Problem(区间统计数字:统计a、b之间各个数字(0~9)出现的次数)相关推荐

  1. poj 2386 Lake Counting

    poj   2386   Lake Counting                           题目链接:http://poj.org/problem?id=2386 题目大意:数湖. 题目 ...

  2. POJ 2386 Lake Counting [DFS]

    POJ 2386 Lake Counting 简单的DFS,用了stack代替递归,输入有问题,搞了蛮久,算法是没问题.所以以后一定要记得加上检查输入的那一步 然后对于点的定义以后就这么办吧 此外还有 ...

  3. POJ 2826 An Easy Problem?! 叉积求多边形面积 【计算几何】

    ACM博客_kuangbin POJ 2826 An Easy Problem?! An Easy Problem?! Time Limit: 1000MS   Memory Limit: 65536 ...

  4. poj 3590 The shuffle Problem(置换群+DP)

    题目链接:poj 3590 The shuffle Problem 题意: 给你一个数n,让你找一个字典序最小的置换序列,使得变换整个周期最大. 题解: 由于置换群的性质,我们可以将n拆分成m个数,使 ...

  5. POJ NOI0105-41 数字统计

    问题链接:POJ NOI0105-41 数字统计. 总时间限制: 1000ms 内存限制: 65536kB 描述 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数. 比如给定范围[2, 2 ...

  6. POJ 3468 A Simple Problem with Integers(线段树区间更新)

    题目链接 这个真费劲...其实我也不懂 为什么...大体思想是,如果把区间更新了,开始的时候只把用懒惰标记标记那个区间,而不更新底层元素,而如果查询的时候顺带着把lz标记给消除...多敲几遍,多调试一 ...

  7. 【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)

    [线段树][模板]讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值) ...

  8. POJ 2386 Lake Counting

    链接:http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS Memory Limit: 65536K Total Submis ...

  9. DFS 之 poj 2386 Lake Counting

    // [11/1/2014 JmingS] /* 遍历整个图,找到 'W' 的点,对其周围八个点其进行深搜,若是 'W' 则用 '.' 替换. 最后,在遍历整个图的过程中,找到多少个 'W',即答案. ...

最新文章

  1. 硬核!如何全面系统地自学 Java ?(必看)
  2. Lucene学习笔记:Field.Store.* 域存储选项
  3. python 加注拼音-又一个奇葩要求,Python是如何将“中文”转“拼音”的?
  4. ECMASCript 2019可能会有哪些特性?
  5. MYSQL-用户操作
  6. 大写汉字转阿拉伯数字c语言,阿拉伯数字转中文数字方法详解(C++实现)
  7. 讯飞智能录音笔SR101:考研的温暖陪伴
  8. 欧洲进出口银行_欧洲对开放银行的推动如何迫使银行应用改善用户体验
  9. 从0到1带你手撸一个请求重试组件,不信你学不会!
  10. 这两个VHDL的问题终于解决了!
  11. [MSSQL]SQL简繁转换函数
  12. Java基础12 implement和extends的区别
  13. php密码如何用星号表示,输入密码显示星号的写法实例
  14. 全新 OceanBase 社区版开发者中心 ODC 核心功能解读
  15. 操作——【1.8 关于音高、时值、位置 】(二)
  16. 成功解决 RecoveryYour PC/Device needs to be repairedThe Boot c onfiguration Data for your PC is missin
  17. Fincy APP评测:安全好用的多功能电子钱包
  18. android简易记账,简单记账(便捷快速记账)
  19. 携程、飞猪?大数据杀熟的背后,到底杀死了谁?
  20. 10个用Java谋生非常有趣的方式

热门文章

  1. 李彦宏:利用人工智能消除996
  2. Oracle删除profil,紧急求助:误删除一个重要的profile
  3. Windows:编写.bat脚本实现文件复制
  4. css Backgroud-clip (文字颜色渐变)
  5. 不好意思,我不想再听正确的废话了
  6. Netty:实现群聊系统+自定义名称+空闲检测+Protobuf
  7. wps怎样c语言程序流程图,wps怎么制作流程图【使用方法】
  8. App/H5/小程序,三者抉择不再懵懵懂懂
  9. 南京赵丽计算机教师,跟随名师,快乐生活,成就学生,享受教育 ——记加入赵丽名师工作室个人成长感悟...
  10. Excel如何批量插入图片并录入图片名称?