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. NGUI注册事件的三种方式

    1.第一种方式 当一个元素要执行某个方法,而这个方法在此元素赋予的脚本上有,那么直接会调用此方法,但此方法的名称必须是内置的固定名称,例如OnClick,OnMouseOver,OnMouseOut等 ...

  2. Adaptive Boosting

    Boosting boosting和bagging很类似,所使用的多个分类器类型都是一致的.另外,他们的主要区别点如下: boosting中不同的分类器是通过串行得到的,每个分类器都是根据已经训练出来 ...

  3. jquery validate 使用示范

    最近应公司要求做了一个jquery的示例文件,包括:模态窗口怎么实现:jquery validate下的校验:怎么做图片特效:怎么实现异步操作:实现图片上传剪切效果等很多特效: 这里把jquery校验 ...

  4. NIO--1

    1.为什么不直接用jdk NIO(1) API繁杂(2) 原始NIO可靠性不是很高.可靠性包括:断开重连,网络闪断,半包读写,失败缓存(3) NIO 的epoll BUG会导致多路复用器Selecto ...

  5. hdu 1846 Brave Game (博弈)

    Brave Game Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  6. JZOJ 5280 膜法师

    好啰嗦......还好作者给了一句话题意,不然光看题就很耗费时间. 样例输入: 1 6 3 1 78 69 55 102 233 666 样例输出: 1 2 3 4 5 6 11  数据范围: 思路: ...

  7. 【CZY选讲·逆序对】

    题目描述 LYK最近在研究逆序对. 这个问题是这样的. 一开始LYK有一个2^n长度的数组ai. LYK有Q次操作,每次操作都有一个参数k.表示每连续2^k长度作为一个小组.假设 n=4,k= ...

  8. Tomcat学习笔记(十三)

    服务器组件和服务组件 服务器组件 org.apache.catalina.Server接口的实例表示Catalina的整个servlet引擎,包含了所有的组件.使用一种优雅的方法来启动/关闭整个系统, ...

  9. mysql数据定期备份删除

    1.这里只写备份mysql的数据库的方法,全备份,包括定时删除. 准备工作,弄一个文件夹存数据库备份数据 第一步:编写shell 脚本,命名为shell.sh #备份数据库 backupdir=/we ...

  10. C中堆和栈的区别

    C++中堆和栈的完全解析 内存分配方面: 堆: 操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删 除,并 ...