《找出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 安装并启动 ...
随机推荐
- Difference between link and @import
原文don’t use @import Using @import within a stylesheet adds one more roundtrip to the overall downloa ...
- springboot activiti 整合项目框架源码 druid 数据库连接池 shiro 安全框架
官网:www.fhadmin.org 工作流模块---------------------------------------------------------------------------- ...
- 笔记:long、longlong、int、float、NSString相互转换
NSString *"; // 1.字符串转int int intString = [string intValue]; // 2.int转字符串 NSString *stringInt = ...
- UITableViewCell的父视图
最近版本测试阶段,发现一个奇怪的问题,以前在A测试机上出现的崩溃bug,解决后今天在B测试机上又出现了,在B上解决完之后,返回到设备A上发现又不行了.最后调试发现是测试设备系统版本不同导致的,A设备是 ...
- pyhton 面向对象之 小明左右手换牌
'''#左右手交换牌 案列#小明手里有俩张牌,左手红桃♥K,右手黑桃♠A,小明交换俩手的牌后,手里分别是什么? 人类: 属性:小明,左手,右手 行为:展示手里的牌, 交换手里的牌手类: ...
- mysql获取随机题目、排序
mysql排序问题(对字符串类型数据进行排序)对普通数字字符串字段排序:select * from qq ORDER BY score*1 DESC,time*1 ASC 一.在mysql操作中我们经 ...
- plupload分片上传视频文件源码展示
plupload分片上传视频文件目录结构如下: |- images//视频上传小图片 |-js// plupload js文件 |-uploads//视频文件存放文件夹 里面是按日期存放 |-ajax ...
- laravel 的用户认证
1.简介 Laravel 中实现用户认证非常简单.实际上,几乎所有东西都已经为你配置好了.配置文件位于config/auth.php,其中包含了用于调整认证服务行为的.文档友好的选项配置. 在底层代码 ...
- 十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
学习目标:1. WM9876接口和工作原理:2. WM9876驱动移植:3. WM9876应用测试:4. 问题总结 1. WM9876接口和工作原理 本节使用了JZ2440开发板移植WM9876驱动 ...
- Ubuntu:未找到合法的活动链接
编辑/etc/NetworkManager/NetworkManager.conf,将managed=false改成managed=true 然后重启. 在桌面环境下,用gedit会出现无法保存的问题 ...