PAT甲题题解-1049. Counting Ones-数学问题
n位数,总共有0~10^n-1共计10^n个数
那么所有数出现的总次数变为n*(10^n)个数
1出现的次数便是十分之一,所以n位数中,1出现的次数为n*10^(n-1)
知道这一个后,接下来就方便求了。
举个例子就方便理解了 3125
从头到尾for一遍
3:
那么便有三组1000以内的:0~999,1000~1999,2000~2999
1000以内的1的个数为300,所以共有3*300=900
但是又因为1000~1999中千位上的1也要算进去,有1000个
所以0~2999中总共有900+1000=1900个1
1:
只有一组完整的100以内的,即0~99(对应3000~3099),在这最后二位数中1出现的次数为20个
又因为31xx中百位上的1也要算进去,但并不是+100,而是25+1,对应3100~3125这26个
所以3000~3099以及31xx共计46个1
(PS:这里还没统计31xx中xx出现的1)
2:
有两组10以内的,即0~9,10~19(对应3100~3109,3110~3119)
这中间最后一位数上1的出现次数为2,3101,3111
又因为311x中十位上的1也要算进去,出现了10次
所以总共12次
(PS:这里还没有统计312x中x位上的1)
5:
1只出现了1次
所以总共1900+46+12+1=1959
表达能力有限,如果还不懂的童鞋一定要自己动手写写
http://www.liuchuo.net/archives/2305
该博客的解题思路比我要好,统计的是每个位上1出现的次数(相当于该位上为1的数有多少个),然后各个位累加起来即可。
然而题目中n<=2^30,应该为long long,但是该博客的代码中int也可以,估计是样例不严谨吧。
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
char num[]; int main()
{
scanf("%s",num);
int len=strlen(num);
long long ans=;
for(int i=;i<len-;i++){
int a=num[i]-'';
int digit=len-i-; //在a右边的位数
for(int j=;j<=a;j++){
ans+=(pow((long long),digit)*(digit)+0.5)/; //注意要加个0.5,保证结果精度正确
if(j==){
if(a!=)
ans+=pow((long long),digit)+0.5;
else
ans+=atoll(num+i+)+; //+1是10..0的情况
}
}
}
if(num[len-]-''>=)
ans++;
printf("%d\n",ans);
return ;
}
PAT甲题题解-1049. Counting Ones-数学问题的更多相关文章
- PAT甲题题解-1004. Counting Leaves (30)-统计每层叶子节点个数+dfs
统计每层的叶子节点个数建树,然后dfs即可 #include <iostream> #include <cstdio> #include <algorithm> # ...
- PAT甲题题解-1115. Counting Nodes in a BST (30)-(构建二分搜索树+dfs)
题意:给出一个序列,构建二叉搜索树(BST),输出二叉搜索树最后两层的节点个数n1和n2,以及他们的和sum: n1 + n2 = sum 递归建树,然后再dfs求出最大层数,接着再dfs计算出最后两 ...
- PAT甲题题解-1068. Find More Coins (30)-dp,01背包
一开始没多想,虽然注意到数据N<=10^4的范围,想PAT的应该不会超时吧,就理所当然地用dfs做了,结果最后一组真的超时了.剪枝啥的还是过不了,就意识到肯定不是用dfs做了.直到看到别人说用0 ...
- PAT甲题题解-1008. Elevator (20)-大么个大水题,这也太小瞧我们做题者的智商了
如题... #include <iostream> #include <cstdio> #include <algorithm> #include <cstr ...
- PAT甲题题解-1010. Radix (25)-二分搜索
题意:给出n1和n2,以及其中一个数的进制,问另一个数是多少进制的情况下,才会是两个数相等.不存在的话,则输出Impossible 这题思路很简单,但是要考虑的比较多,在简单题里面算是比较好的. 有两 ...
- PAT甲题题解-1011. World Cup Betting (20)-误导人的水题。。。
题目不严谨啊啊啊啊式子算出来结果是37.975样例输出的是37.98我以为是四舍五入的啊啊啊,所以最后输出的是sum+0.005结果告诉我全部错误啊结果直接保留两位小数就可以了啊啊啊啊 水题也不要这么 ...
- PAT甲题题解-1012. The Best Rank (25)-排序水题
排序,水题因为最后如果一个学生最好的排名有一样的,输出的课程有个优先级A>C>M>E那么按这个优先级顺序进行排序每次排序前先求当前课程的排名然后再与目前最好的排名比较.更新 至于查询 ...
- PAT甲题题解-1019. General Palindromic Number (20)-又是水题一枚
n转化为b进制的格式,问你该格式是否为回文数字(即正着写和倒着写一样)输出Yes或者No并且输出该格式又是水题... #include <iostream> #include <cs ...
- PAT甲题题解-1023. Have Fun with Numbers (20)-大数加法
和1024一样都是大数据的题,因为位数最多要20位,long long最多19位给一个num,求sum=num+num问sum包含的数字,是否是num的一个排列,即数字都一样,只是顺序不同罢了. #i ...
随机推荐
- Winfrom 使用WCF 实现双工通讯
实现双工通讯主要分三步. 通信接口的定义: 被调用接口的实现 双工通道的建立 请先引用DLL(CSDN的代码编辑器真尼玛蛋疼) 整个解决方案的结构 1.通信接口的定义: 服务端调用客户端接口IServ ...
- easyui combobox 带 checkbox 亲自验证
$('#cc').combobox({ url:'combobox_data1.json', method:'get', ...
- Spark项目之电商用户行为分析大数据平台之(八)需求分析
1.按条件筛选session 搜索过某些关键词的用户.访问时间在某个时间段内的用户.年龄在某个范围内的用户.职业在某个范围内的用户.所在某个城市的用户,发起的session.找到对应的这些用户的ses ...
- String----是一个对象
* 字符串可以看成是字符组成的数组,但是js中没有字符类型 * 字符是一个一个的,在别的语言中字符用一对单引号括起来 * 在js中字符串可以使用单引号也可以使用双引号 * 因为字符串可以看成是数组,所 ...
- [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)
有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...
- [转]System.DllNotFoundException: 无法加载 DLL“*.dll”: 内存位置访问无效。 (异常来自 HRESULT:0x800703E6)
我在使用地税发票控件进行开票的测试的时候,在xp上测试时正常的,在别人的win7系统测试也是正常,但我在我本机确不正常.我本机装的是msdn版本win7系统,这个系统比较原装. 错误信息如下: -- ...
- UML类图简单学习 各种对象、关系UML表示法
<大话设计模式>上面的UML类图: 类的UML表示 动物 的矩形框 表示是一个类. 类图分为三层,第一层显示类的名称,如果是抽象类,则用斜体表示:第二层是类的特性,通常就是类的字段和属性: ...
- servlet3.0
1.之前我们创建的项目是servlet2.5,之前的版本,servlet.filter.listener需要配置web.xml 在servlet3.0的时候,没有web.xml,提供注解开发. ser ...
- CentOS配置Hive
hive搭建共分为三种模式:1.embedded,2.local,3.remote server 在这里,主要是配置第3种模式:remote server模式,如下图所示: 我的环境共三台虚拟机:Ho ...
- python3 raise HTTPError(req.full_url, code, msg, hdrs, fp) urllib.error.HTTPError: HTTP Error 403: Forbid
1.分析: 如果用 urllib.request.urlopen 方式打开一个URL,服务器端只会收到一个单纯的对于该页面访问的请求,但是服务器并不知道发送这个请求使用的浏览器,操作系统,硬件平台等信 ...