《找出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的次数》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. .NET中Quartz任务调度器的简单应用实例

    1.首先从NuGet中安装Quartz,安装最新版本就OK 2.新建一个Job类实现Quart中的IJob接口用于执行业务逻辑,代码如下: class CheckUpdateJob : IJob { ...

  2. 多进程共享内存的MemoryStream

    文章转载于http://www.raysoftware.cn/?p=506 具体用处呢,有很多,比如多进程浏览器共享Cookie啦,多个进程传送点数据啦. 共享内存封装. 封装成了MemoryStre ...

  3. Diy智能家居-1.基于esp8266的语音控制系统(开篇)

    目录Diy智能家居-1.基于esp8266的语音控制系统(开篇) https://blog.csdn.net/arno1988/article/details/82628589 Diy智能家居-2.基 ...

  4. 复制文件到IDE等工具出现乱码解决方案

    首要的解决方案是设置文件或者项目或者工作空间的编码,可以采用在文件上.项目上右键->properties进行设置 第二种方式是在editplus等编辑器里打开文件,然后打开文件之后点击菜单Fil ...

  5. Matlab zeros ones

    zeros函数——生成零矩阵 ones函数——生成全1阵 [zeros的使用方法] B=zeros(n):生成n×n全零阵. B=zeros(m,n):生成m×n全零阵. B=zeros([m n]) ...

  6. jQuery学习-页面就绪函数

    1.开发工具HBuilder <!DOCTYPE html> <html> <head> <meta charset="utf-8" /& ...

  7. K近邻算法小结

    什么是K近邻? K近邻一种非参数学习的算法,可以用在分类问题上,也可以用在回归问题上. 什么是非参数学习? 一般而言,机器学习算法都有相应的参数要学习,比如线性回归模型中的权重参数和偏置参数,SVM的 ...

  8. avascript小技巧

    avascript小技巧 事件源对象 event.srcElement.tagName event.srcElement.type 捕获释放 event.srcElement.setCapture() ...

  9. 定时任务的使用-crond

    第1章 练习题 1.1 每天晚上 12 点,打包站点目录/var/www/html 备份到/data 目录下(最好每次备份按时间生成不同的备份包) 1.1.1 测试命令 [root@znix ~]# ...

  10. CSS过渡动画之transition

    O(∩_∩)O~ 这两天在看看CSS的相关内容,关于transition动画感觉很有意思,分享一下. CSS负责给html加效果,自然少不了各种动画,今天介绍一下transition. 概述 看一段比 ...