《找出1到正整数N中出现1的次数》
《找出1到正整数N中出现1的次数》
编程思想:依次求出正整数每个位数上出现1的次数,累加即可得到最后想要的结果;而每一位上出现1的个数与和它相邻的其它位数上的数字有关系(以此位置上的数为对称轴,其左边的所有数字作为其最高位,其右边的数字作为其最低位;当然若此位置已处于最低位或最高位,那么它对应的最低位或最高位置0),与它们有一个可求出1的固定的关系式(一个数各个位置上的数分离后,它们都对应着各个位置的基准,例如个位上的数对应的基准为1,以此类推即可),即若此位置上的数字为0,则在此位置上出现1的个数为最高位乘以基准;若为1,则等于最高位乘以基准加最低位再加1;若为其他,则为最高位加1乘以基准即可。即后,各个位上出现1的个数累加即可。
具体设计:(1)以4个变量high,m,low,f分别作为分离后当前位数的最高,本身,最低位以及分离其的基准;以while语句判断能进行进程的条件,只有当此数不越级别,才能继续进行,即在其中设置了一个判断终止的条件;
(2)依次按照个位,十位.......等等的顺序把各个位置上的数字分离出来,并以其为对称轴找出其最高位以及最低位:low=n-(n/f)*f;m=(n/f)%10;high=n/(f*10);
(3)用switch语句根据此位置上的数与最低,最高位上的数的固定关系式,依次累加计算每位上出现1的次数:switch(m){ case 0:count+=high*f; break; case1: count+=high*f+low+1;break;default:count+=(high+1)*f; break; }
(4)依次按照各位的基准把各位相应的出现的1的次数累加起来直至遇到终止的条件即可得到最终想要的结果。
源代码:
//找出1到正整数N中出现1的次数
//June 2th,2015
#include<iostream>
using namespace std;
long int f( long int n)
{ long int low=,high=,m=,f=,count=;
while(n/f!=)
{
low=n-(n/f)*f;
m=(n/f)%;
high=n/(f*);
switch(m)
{
case :
count+=high*f;
break;
case :
count+=high*f+low+;
break;
default:
count+=(high+)*f;
break;
}
f*=;
}
return count; }
void main()
{
int a,i=;
cout<<"请输入一个正整数:"<<endl;
cin>>a;
cout<<"f"<<"("<<a<<")"<<"="<<f(a)<<endl;
long int m;
cout<<"在32位整数中能找到符合要求的f(n)=n的最大数是:"<<endl;
for(m=;m>=&&i<;m--)
{
if(f(m)==m)
{
cout<<m<<endl;
i++;
}
}
}
实验结果截图:

编程总结:(1)当老师给出问题的时候,只是单纯混沌的举了一些不相干的例子,并没有从其中总结出什么规律;
(2)听了同学们的各抒己见,大多数还是不能满足老师想要的结果,继续思索中.......
(3)课下在查阅了相关资料以及汲取了老师上课的提示后,明了了如何解决问题以及编写代码了;
总之,多交流,多思考,多汲取别人的优点,多开拓视野是解决问题的必经之路!
《找出1到正整数N中出现1的次数》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- 【取色】ColorMania
取色剂软件
- cgroup测试存储设备IOPS分配
1 使用:创建树并且attach子系统 首先要创建文件系统的挂载点作为树的根 mkdir /cgroup/name mkdir /cgroup/cpu_and_mem Mount这个挂载点到一个或者多 ...
- 《Effective C++》item25:考虑写出一个不抛异常的swap函数
std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...
- FIFO队列 ADT接口 数组实现
FIFO.h (接口) #include "Item.h" #include <stdlib.h> typedef struct STACKnode *link; st ...
- Verilog 奇数分频
代码: module odd_div( ); ; //分频系数,3即3分频 ; reg clk, rstn, clk_div_pos, clk_div_neg; wire clk_div_out; : ...
- 20155202 2016-2017-2 《Java程序设计》第9周学习总结
20155202 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 整合数据库: JDBC驱动程序,按照方式分4种类型: Type1 : JDBC-ODBC B ...
- 2017-2018-1 20155336 《信息安全系统设计基础》加分作业:实现mypwd
2017-2018-1 20155336 <信息安全系统设计基础>加分作业:实现mypwd 什么是PWD? 用man pwd查看: 用于打印当前工作目录的工作路径 1.命令格式:pwd[选 ...
- Luogu5110 块速递推
题面 题解 线性常系数齐次递推sb板子题 $a_n=233a_{n-1}+666a_{n-2}$的特征方程为 $$ x^2=233x+666 \\ x^2-233x+666=0 \\ x_1=\fra ...
- BZOJ3196 二逼平衡树 ZKW线段树套vector(滑稽)
我实在是不想再打一遍树状数组套替罪羊树了... 然后在普通平衡树瞎逛的时候找到了以前看过vector题解 于是我想:为啥不把平衡树换成vector呢??? 然后我又去学了一下ZKW线段树 就用ZKW线 ...
- 【BZOJ 2132】圈地计划 && 【7.22Test】计划
两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...