1049 Counting Ones
1. 这一题起初我用递归的方式,还写了一个数整数有多少个1的函数,OneNum[i] = OneNum[i-1]+countOne(i);毫不意外地出现了段错误,也就是递归调用的次数太多。
2. 看了参考书,得到了思路上的启发:
给定一个数12,我们可以数从1到12,在个位上和十位上1这个数字各自出现了多少次,然后将二者相加。个位上在1-10中1出现了一次,在11-12中1出现了1次,共2次;十位上在10-12中1出现了3次,3+2=5。
如果一个数字还看不出规律,再举一个数123。个位上在1-10中出现1次,11-20中出现1次,……,120-123中出现一次,一共是123/10+1 = 13次,十位上在1-100中出现10次,在101-123中出现10次,一共是(123/100+1)*10 = 20次,百位上在100-123中出现了123-100+1=24次。
依然看不出,再举一个数1234。个位上出现1234/10+1=124次,十位上出现(1234/100+1)*10=130次,百位上出现(1200/1000+1)*100=200次,千位上出现1234-1000+1=235次。
依稀有些眉目了,但是刚才举得例子都是从大到小,现在再举一例4111。个位上出现4111/10+1=412次,10位上出现4111/100*10+(1-0+1)=412次,百位上出现4111/1000*100+(4111%100+1)=412次,千位上出现1*1000次。
可以看出如果当前位上的数字大于1,该位置上1出现多少次仅仅取决于前面的数字,如果等于1还取决于后面的数字。现在再举1例看看小于1的情况。
4001
对于个位:4001/10+1
对于10位:4001/100
对于100位:4001/1000
对于1000位:1*1000
abcde
e所在位:if(e<1)abcd,if(e>=1)abcd+1
d所在位:if(d<1)abc*10,if(d==1)abc*10+e+1,if(d>1)(abc+1)*10
c所在位:if(c<1)ab*100,if(c==1)ab*100+de+1,if(c>1)(ab+1)*100
b所在位:if(b<1)a*1000,if(b==1)a*1000+cde+1,if(b>1)(a+1)*1000
a所在位:if(a==1)bcde+1,if(a>1)1*10000
对于最低位和最高位可以特判。
将读入的整数n转化为字符串str,L为字符串的长度
首先将字符串翻转,最低位对应下标0。
if(str[0]<1)one_count += n/pow(10,i+1);else one_count += n/pow(10,i+1)+1;
最高位对应下标L-1
if(str[L-1]==1)one_count += n%pow(10,L)+1;else one_count += 1*pow(10,L)
对于当中任意位i
if(str[i]<1)one_count += n/pow(10,i+1)*pow(10,i)
if(str[i]==1)one_count += n/pow(10,i+1)*pow(10,i)+n%pow(10,i)+1
if(str[i]>1)one_count += (n/pow(10,i+1)+1)*pow(10,i)
注意一些细节:
1. pow得到的是浮点数,如果在mod后面会报错,如果在除号后面会导致除法的结果是浮点数,因此要在前面加强制类型转换。
新习得的方法:
1.从特殊到一般找规律
2.如果出错,用自己的测试用例debug
AC代码
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
#include<stdlib.h>
#include<time.h>using namespace std;
typedef long long LL;const int maxn = 110;
const int MOD = 1000000007;
const int INF = 1000000000;//INF:下确界
const LL SUP = (1LL<<63)-1;//SUP:上确界
const double eps = 1e-5;int main(){int n;scanf("%d",&n);char temp[20],str[20];sprintf(temp,"%d",n);int L = strlen(temp);for(int i=0;i<L;i++){//将字符串反转 str[i] = temp[L-1-i];}int count_one = 0; //最低位 if(str[0]-'0'<1)count_one += n/10;else count_one += n/10+1;//最高位if(L-1>0){//防止只有1位数的特殊情况 if(str[L-1]-'0'==1)count_one += n%(int)pow(10,L-1)+1;else count_one += 1*(int)pow(10,L-1);}//中间位for(int i=1;i<L-1;i++){if(str[i]-'0'<1)count_one += n/(int)pow(10,i+1)*(int)pow(10,i);else if(str[i]-'0'==1)count_one += n/(int)pow(10,i+1)*(int)pow(10,i)+n%(int)pow(10,i)+1;else if(str[i]-'0'>1)count_one += (n/(int)pow(10,i+1)+1)*(int)pow(10,i);} printf("%d",count_one);return 0;
}
相关文章:

Oracle:递归查询(树形结构数据)
今天要做一个查询功能:查询某用户所属部门,且包含该部门的所有上级部门信息。偶然找到了一个方法,特意来做个笔记。分享给和我一样的菜鸟,哈哈 查询子节点 1 select * 2 from d_arc_dep 3 start with depid 100000 4 connect b…

FIN_WAIT_2
来自转载:http://blog.sina.com.cn/s/blog_8e5d24890102w9yi.html 上图对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻地认识,不能只…

网页制作知识:XHTML 和 DOCTYPE 切换
为 Web页指定 DOCTYPE 会影响浏览器呈现页的方式。Internet Explorer、Mozilla Firefox 和 Opera 全都支持一种名为“DOCTYPE 切换”(也叫“DOCTYPE 嗅探”)的功能。 引入 DOCTYPE 切换的目的是使浏览器能够正确地呈现符合标准的 Web 站点以及旧式 Web 站…

1003 我要通过!
1. 总体思路是自己先写写,看看哪些字符串符合,找出规律,然后根据测试用例来矫正。 2. 用到了递推的方法,我使用countA[maxn]数组存放截至当前位置一共出现的A的个数。 3. 正确的字符串满足的条件是:P之前A的个数P和T…

微信电视来了 微信遥控传屏弹幕统统有
据证券时报消息,腾讯携手康佳推微信电视,具有微信传屏、微信弹幕、微信遥控等基于腾讯微信平台的电视功能。想了吧?别急,11月5日,微信互联电视将在康佳全国终端门店全部上线。微信电视2.0版将新增语音搜索、节目单分享…

机器学习-线性回归LinearRegression
概述 今天要说一下机器学习中大多数书籍第一个讲的(有的可能是KNN)模型-线性回归。说起线性回归,首先要介绍一下机器学习中的两个常见的问题:回归任务和分类任务。那什么是回归任务和分类任务呢?简单的来说,…

使用Windows的SHFileOperation外壳函数实现文件操作
在Windows的shellapi文件中定义了一个名为SHFileOperation()的外壳函数,用它可以实现各种文件操作,如文件的拷贝、删除、移动等,该函数使用起来非常简单,它只有一个指向SHFILEOPSTRUCT结构的参数。使用SHFi…

(C++)寻找1-100以内所有素数,复杂度为O(nsqrt(n))与O(nloglogn)的两种方法
注意:1既不是质数也不是合数,2是质数。 1. 复杂度为O(nsqrt(n)) 原理:先写一个判断整数是否为素数的函数,其复杂度为sqrt(n),其原理是对于一个数n,如果它有除了1和自身之外的因子,那么这个因子…

这样就算会了PHP么?-10
关于基本的文件读写内容: <?phpecho "readfile function:<br>";readfile("tm.txt");echo "<br>";echo "file function:<br>";$f_arr file("tm.txt");foreach ($f_arr as $cont) {echo $c…

个人项目-小学四则运算 “软件”之初版
本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2166 我的github远程仓库的地址:https://github.com/yanyuluu/yanyuluu/tree/master/ruanjiangc 第一部分:要求 具体要求:任何编程语言都可以…

如何清晰地思考
如何清晰地思考(近一年来业余阅读的关于思维方面的知识结构整理) Tags: 思维改变生活save it16 saved tags: thinking mind 思考 一年前一个偶然的机会我遇到了一本书——《影响力》,看完这本书之后对我们如何思维产生了极大的兴趣&…

1015 Reversible Primes
1. 这道题因为一上来看到又是进制的转换又是素数的判断,想到自己十进制转化成Q进制的除基取余掌握得并不好,就很紧张,以为要封装一堆函数,然后我也确实这么做了,经过一堆调试(字符和数字之间转化容易忘记),…

跨平台表空间传输(摘自eygle《循序渐进Oracle》)
需要注意的是,在Oracle 10g之前,数据文件是不能够跨平台传输使用的,从Oracle 10g开始,Oracle支持跨平台的表空间传输,这极大地增强了数据迁移的便利性。 1. 字节顺序和平台 数据文件所以不能跨平台,主要是…

EditPlus集成Java编译和运行命令组建轻量级Java SE开发工具
http://www.gogogogo.me/development/EditPlus-Java.html转载于:https://www.cnblogs.com/svennee/p/4071712.html

单例测试模式中【饿汉式】与【懒汉式】的区别
package day25.thread;/** /*** author Mr Chen* create 2018-10-09 18:37* 单例测试模式:保证类在内存中只有一个对象*/ public class Dome01 {public static void main(String[] args){Singleton s1 Singleton.s; //成员变量被私有…

1078 Hashing
关键在于这句:Quadratic probing (with positive increments only) is used to solve the collisions.开始不懂二次探测,因此做不出来。所谓二次探测就是如果num%mSize被占坑了,就看看(num1*1)%mSize有没有被占,还是被占ÿ…

C# 多线程 参数传递
class ThreadDemo { private Thread[] threads; private int thrs 10;//线程数量 private ArrayList stringList; private event EventHandler OnNumberClear;//数据删除完引发的事件 public ThreadDemo(int number) …

Android 中自定义控件和属性(attr.xml,declare-styleable,TypedArray)的方法和使用
一、 在res/values 文件下定义一个attrs.xml 文件.代码如下: <?xml version"1.0" encoding"utf-8"?> <resources> <declare-styleable name"MyView"> <attr name"textColor" format"color…

排序学习之---快速排序
一、前言 快速排序是一种交换排序,它由C. A. R. Hoare在1962年提出。 二、算法思想 快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数。 然后再按此方法对这两部…

1059 Prime Factors
1. 第一次测试点三错误,由于1既不是质数也不是合数,因此对于1来说需要有一个特殊判断,输出:11,但是一开始多加了一个等号。 2. 本题需要数学基础好,两个重点: (1)会打印某个范围内的素数表 (…

适用于SQL Server生产环境DBA的七大技巧
摘自:http://database.ctocio.com.cn/452/8976452.shtml1、使用forfiles命令删除陈旧的数据库备份文件 从Windows Server 2003开始forfiles命令就是Windows的一个自带命令行工具,它主要用于对文件的批处理, 利用SQL Server代理作业࿰…

关于PCA算法的一点学习总结
本文出处:http://blog.csdn.net/xizhibei PCA,也就是PrincipalComponents Analysis,主成份分析,是个非常优秀的算法,依照书上的说法: 寻找最小均方意义下,最能代表原始数据的投影方法 然后自己…

1096 Consecutive Factors
1. 对于题目描述中 list the smallest sequence of the consecutive factors 正确理解是:如果有多组连续因子,输出开头因子最小的那个序列(一开始理解成输出数目最小的那个序列) 2. 想象一下这种情况,2*3*4*5 120,4*5*6 120&am…

百度DisConf分布式配置框架源码试读(一)HttpClient 长连接
Spring Cloud Config配置中心我在学习Spring Cloud Config配置中心时理解了它体系下的配置中心的强大。实现了配置的远程管理、微服务的配置更新。Spring Cloud Config配置中心体系还是有其不足的地方。虽然它实现了配置和服务的分离。但是做不到实时的更新。需要手动触发POST …

开篇第一题:经典中的经典!
开篇第一题:经典中的经典!——评《编程之美》原贴地址:http://www.douban.com/review/2130819/ 应该是差不多两个月前收到了这本书,一直到最近才抽出时间来看了下,这本书的开篇的第一题现在基本已经成了经典中的经典了…

(C++)高精度整数的存储、读入、比较和四则运算
目录 1. 存储 2. 读入 3. 比较大小 4. 加法 5. 减法 6. 高精度整数和低精度整数的乘法 7. 高精度整数除以低精度整数 高精度整数,又称大整数,其含义就是用基本数据类型无法存储其精度的整数。如:10进制下有着1000个数位的整数。 低精…
TP-link 设置MAC地址过滤
如果你想限制上网的人数,你可以在路由中设置MAC地址过滤,或IP地址过滤 以下以MAC地址过滤为例: http://192.168.1.1/ 输入用户名,密码登录 进入介面: “开启防火墙(防火墙的总开关)” 也要打上…

flask的客户端服务端
1.首先要进行后端与前端的连接有get 和post请求 get请求是直接在网页上打出已将定义好的网址 if __name__ __main__: app.run(host"localhost",port8800)host也可以写ip地址2.在进行交互前需要提前引入 flask 模块 pip3 install Flask详细代码 1 import json2 #…

1023 Have Fun with Numbers
考察大数乘法(整型是2)或者加法(两个相同的数字相加),然后将两个大数用到的0-9的个数比对。 进入比对前先判断长度是否相等,如不等,说明一定不是原序列。 一些需要注意的细节: 1. 字符串的字符转化为整数时不要忘记 减0 2. 封…

Oracle中Hint深入理解(原创)
http://czmmiao.iteye.com/blog/1478465 Hint概述 基于代价的优化器是很聪明的,在绝大多数情况下它会选择正确的优化器,减轻了DBA的负担。但有时它也聪明反被聪明误,选择了很差的执行计划,使某个语句的执行变得奇慢无比。 此时就…