数字统计问题
2015-08-10 14:38
218 查看
【问题描述】一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤109) 。编程计算书的全部页码中分别用到多少次数字0,1,2,…,9。
【样例输入】
11
【样例输出】
1
4
1
1
1
1
1
1
1
1
【解答】
#include<stdio.h>
int main()
{
int n,j;
scanf("%d",&n);
int a[10]={0};
int i;
for(j=1;j<=n;j++)
{
i=j;
while(i)//计算个位数字
{
if(i%10==0)
{
a[0]+=1;
}
if(i%10==1)
{
a[1]+=1;
}
if(i%10==2)
{
a[2]+=1;
}
if(i%10==3)
{
a[3]+=1;
}
if(i%10==4)
{
a[4]+=1;
}
if(i%10==5)
{
a[5]+=1;
}
if(i%10==6)
{
a[6]+=1;
}
if(i%10==7)
{
a[7]+=1;
}
if(i%10==8)
{
a[8]+=1;
}
if(i%10==9)
{
a[9]+=1;
}
i=i/10;//n缩小10倍
}
}
for(j=0;j<10;j++)
{
printf("%d\n",a[j]);
}
return 0;
}
时间复杂度为O(n*log(n))较高,还需优化
【样例输入】
11
【样例输出】
1
4
1
1
1
1
1
1
1
1
【解答】
#include<stdio.h>
int main()
{
int n,j;
scanf("%d",&n);
int a[10]={0};
int i;
for(j=1;j<=n;j++)
{
i=j;
while(i)//计算个位数字
{
if(i%10==0)
{
a[0]+=1;
}
if(i%10==1)
{
a[1]+=1;
}
if(i%10==2)
{
a[2]+=1;
}
if(i%10==3)
{
a[3]+=1;
}
if(i%10==4)
{
a[4]+=1;
}
if(i%10==5)
{
a[5]+=1;
}
if(i%10==6)
{
a[6]+=1;
}
if(i%10==7)
{
a[7]+=1;
}
if(i%10==8)
{
a[8]+=1;
}
if(i%10==9)
{
a[9]+=1;
}
i=i/10;//n缩小10倍
}
}
for(j=0;j<10;j++)
{
printf("%d\n",a[j]);
}
return 0;
}
时间复杂度为O(n*log(n))较高,还需优化
相关文章推荐
- python测试框架--nose
- Linux的磁盘与文件管理系统(1)
- fgets,fputs
- 【vmware】vCenter Converter Standalone转换1%时报错
- javascript深入理解js闭包
- app的后台接口通讯方案
- hdu 1166 敌兵布阵 线段树
- Oracle 12C -- native left outer join的加强
- 瑞士轮
- SecureCRT的上传下载小技巧(Linux)
- Python正则表达式
- Java 时间--Date,SimpleDateFormat,Calendar
- HDU 1503(Advanced Fruits)最长公共子序列+路径记录
- Shell标准输出、标准错误 >/dev/null 2>&1
- 加解密系统基础概念
- 双击退出登录功能的实现
- Qt5+VS2013 “LINK : fatal error LNK1117: 选项“VERSION:1.0.0”中的语法错误”
- 线性表--链表
- IOS开发—UIScrollView自动布局
- java static