http://noi.openjudge.cn/ch0105/40/

40:数1的个数-拓展变形

总时间限制: 
1000ms

内存限制: 
65536kB
描述

给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。

例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。

输入
正整数n。1 <= n <= 10000。
输出
一个正整数,即“1”的个数。
样例输入
12
样例输出
5

#include <iostream>
#include <cstdio>
#include <cstring> //for memset
#include <algorithm> //for max
using namespace std; int cntone(int n,int x)
{
int cnt=,i=,tmp;
for(i=;i<=n;i++)//1~n
{
tmp=i;
while(tmp)
{
if(tmp%==x)
cnt++;
tmp/=;
}
}
return cnt;
}
int main()
{
int n,x;
while(cin>>n>>x)
{
cout<<cntone(n,x)<<endl;
}
}

time:nlog(n) 计算数字 x 在 1-n 中出现的次数

找规律:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
/*只求1的个数*/
int cntone(int n)
{
int cnt=;
for(int i=;i<=n;i*=)//1~n
{
int a=n/i,b=n%i;
cnt+=(a+)/*i+((a%)==?b+:); //之所以补8,是因为当百位为0,则a/10==(a+8)/10,当百位>=2,补8会产生进位位,效果等同于(a/10+1)
}
return cnt;
}
int main()
{
int n;
while(cin>>n)
{
cout<<cntone(n)<<endl;
}
}

time:logn 计算数字 1 在 1-n 中出现的次数

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
// 计算数字 X (不包括0)在 1-n 中出现的次数。
// X = 0 时,规律与上面给出的规律不同,需要另行考虑。
int cntone(int n,int x)
{
int cnt=,tmp;
for(int i=; tmp=n/i; i*=)//1~n
{
cnt += (tmp/)*i;
int cur = tmp%;
if(cur>x)
{
cnt+=i;
}
else if(cur == x)
{
cnt+=n-tmp*i+;
}
}
return cnt;
}
// X = 0 时
int cntzero(int n)
{
int cnt=,k;
for(int i=; (k=n/i)/; i*=)
{
cnt+= (k/)*i;
if(k%==)
{
cnt+=n-k*i+-i;
}
}
return cnt;
}
//合并:计算数字 X 在 1-n 中出现的次数,对 X 从 0 到 9 都有效:
int cnts(int n,int x)
{
int cnt=,k;
for(int i=; k=n/i; i*=)
{
int high=k/;
if(x==)
{
if(high) high--;
else break;
}
cnt+=high*i;
int cur=k%;
if(cur>x) cnt+=i;
else if(cur==x) cnt+=n-k*i+;
}
return cnt;
}
int main()
{
int n,x;
while(cin>>n>>x)
{
cout<<cntone(n,x)<<" "<<cntzero(n)<<" "<<cnts(n,x)<<endl;
}
}

计算数字 X 在 1-n 中出现的次数,对 X 从 0 到 9 都有效

2. 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; int cnts(int x)
{
int cnt=;
while(x)
{
if(x%==) cnt++; //n&1
x/=; //n>>=1;
}
return cnt;
} int main()
{
int n;
while(~scanf("%d",&n),n)
{
int cnt=cnts(n);
while(n++)
{
if(cnt==cnts(n))
{
cout<<n<<endl;
break;
}
}
}
}

poj 2453

 51nod 1042

数字0-9的数量

模板:统计1~n内x的个数的更多相关文章

  1. ls命名 | Linux统计文件夹内的文件个数

    ls命名 man ls -R 递归列出全部的目录内容 recusive -a 列出所有的文件(包括以 . 开头的隐藏文件) all -r 逆序排列 reverse -t 按照时间信息排序 time - ...

  2. JAVA统计一定范围内的质数个数

    public class TestNumber{ public static void main(String[] args){ System.out.println(roundPrimeCount( ...

  3. 【模板小程序】求M~N范围内的质数个数

    /* 本程序说明: [编程题] 求素数 时间限制:2秒 空间限制:32768K 输入M.N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数.素数定义:除了 ...

  4. bash 统计在线时长最长的十个玩/统计一天内一直处于不活跃状态的玩家的百分比

    1.某游戏的客户端每隔5分钟会向服务端报告一次玩家的账户积分,如果两次报告的时间间隔不大于5分钟,认为该玩家在这5分钟内在线,假设报告数据的格式如下: IP                   Dat ...

  5. L - Prime Number(求n内质数的个数)

    Description Write a program which reads an integer n and prints the number of prime numbers which ar ...

  6. HDU-1695 GCD(求一个区间内与一个数互质的个数)

    题意: 给你一个T,是样例的个数,接下来是五个数l1,r1,l2,r2,k  前四个数代表两个区间(l1,r1),(l2,r2)这个题l1=1,l2=1; 取x1属于(1,r1),x2属于(1,r2) ...

  7. Tocmat 统计tomcat进程内的线程数

    获取tomcat进程pid ps -ef | grep tomcat 统计该tomcat进程内的线程个数 ps -Lf  558899 | wc -l

  8. hdu 4630 查询[L,R]区间内任意两个数的最大公约数

    No Pain No Game Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. hdu 4638 树状数组 区间内连续区间的个数(尽可能长)

    Group Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

随机推荐

  1. 剑指Offer - 九度1521 - 二叉树的镜像

    剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...

  2. 【Validation】林轩田机器学习基石

    这一节主要讲如何通过数据来合理的验证模型好不好. 首先,否定了Ein来选模型和Etest来选模型. (1)模型越复杂,Ein肯定越好:但是Eout就不一定了(见上一节的overfitting等) (2 ...

  3. 珍藏版 Python 开发工程师面试试题

    珍藏版 Python 开发工程师面试试题 说明:不拿到几家公司的offer,那就是卑鄙的浪费 一.Python_基础语法 1.可变与不可变类型: 2.浅拷贝与深拷贝的实现方式.区别:deepcopy如 ...

  4. day06_06 字典操作01

    1.0 字典操作 dic1 = {'name':'alex'} dic1['age'] = 18 print(dic1) #>>>{'age': 18, 'name': 'alex' ...

  5. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  6. sshd_config_for_centos

    # $OpenBSD: sshd_config,v // :: djm Exp $ # This is the sshd server system-wide configuration file. ...

  7. CMake Tutorial & Example

    Tutorial CMakeLists用于告诉CMake我们要对这个目录下的文件做什么事情 cmake 的特点主要有: 1,开放源代码,使用类 BSD 许可发布.http://cmake.org/HT ...

  8. python import模块熟悉方法

    python import导入的可用模块很多,新增速度较快,无法一次性全部掌握. 掌握熟悉一种模块的方法是非常有价值的技能. 探究模块可以从python解释器入手,具体流程记录如下: 以os模块为例: ...

  9. JavaScript里面的基本函数

    1.主要有三类基本函数 <script type="text/javascript"> // 普通函数 function func1(arg){ return true ...

  10. Java系列学习说明

    最近要回顾以前的开发知识了,每天一个案例,争取早日成为一名合格的程序猿,现在就是猴娃子级别的.