(Realx 数论1.28)POJ 2282 The Counting Problem(区间统计数字:统计a、b之间各个数字(0~9)出现的次数)
来源:互联网 发布:死神镰刀1.5米淘宝 编辑:程序博客网 时间:2024/05/30 04:54
题意:
统计两个整数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)出现的次数)
- 统计区间[a,b]各个数字出现的个数:poj 2282 The Counting Problem poj 3286
- Poj 2282 The Counting Problem[统计区间 0 - 9出现的次数]
- (Relax 数论1.29)POJ 3286 How many 0's?(统计a-b之间-出现的次数)
- POJ 3286 How many 0's? / 2282 The Counting Problem 排列组合统计数字
- POJ 2282 && HDU 1663 The Counting Problem(数论)
- 有序数组统计各个数字出现的次数
- (Relax 数论1.30)POJ 3252 Round Numbers(计算a-b中round number的个数(0的出现的次数比1出现的次数多))
- 求一个区间[a,b]中数字1出现的次数
- 统计数字出现的次数,最大次数的统计出来
- POJ 2282-The Counting Problem(组合数学_区间计数)
- poj 2282 The Counting Problem 按位统计
- POJ 3368 区间数字出现最多次数
- noip2010 数字统计 (统计某一数字区间中,2出现的次数)
- noip2010 数字统计 (统计某一数字区间中,2出现的次数)
- Sicily.1125. Arnie versus the IRS(统计时间段内各个数字出现次数,不算周六日)
- 计算页码,统计0到9数字出现的次数
- C#-统计数字中每种数字出现的次数
- Hadoop初安装
- WIN7下IIS7调试ASP源码出现错误 '800a0e7a'并乱码的解决方案
- struts2线程安全
- ubuntu里安装python脚本,让C++的容器可以在gdb中看见
- hdu 2072
- (Realx 数论1.28)POJ 2282 The Counting Problem(区间统计数字:统计a、b之间各个数字(0~9)出现的次数)
- UVA 111 LCS
- 如何实现十进制转换为二进制
- python的nltk中文使用和学习资料汇总帮你入门提高
- 线程的同步与互斥
- vc编译ffmpeg遇到问题(inttypes.h和UINT64_C问题)
- nlp, ml, 学习书单
- mysql触发器
- 嵌入式学习——LINUX的基本知识 的基本知识【2】