前言

本题来源于粉丝的求助。

关于粉丝求助的问题,我们会按照先后顺序来解答,并从公众号后台回复答案和解析。

书的最后一页时间限制: 1000 ms    内存限制: 65536 KB

【题目描述】

某本书的页码从1开始,小明算了算,总共出现了202个数1,编程求这本书一共有多少页?

【输入】

【输出】

一个正整数,即这本书一共有多少页。

【输入样例】

【输出样例】

不提供

说明

主要考查循环嵌套。

本题与下方题解的解题思路类似。

【题解·循环嵌套】1095:数1的个数

【信奥】如何深刻理解除法和取模运算(基础篇)

思路分析

本题的关键是“1”的数法。第1页肯定有1个1,但第11页、111页算几个1呢?其实,根据题意不难理解,是1的个数,而不是一页中如果含有1就算1个。例如第11页,算两个1,而不是1个1。所以,在数1的过程中,要把页码的每一位数字都拆分出来,如果含有1则累计。

从第1页开始,一页一页地数,很明显要使用循环,第一次循环数第1页,第二次循环数第2页,以此类推。而编写循环时,对于初学者而言,最难无疑是编写循环条件。从题目中得知,只要数到202个1便足够。所以,可以声明一个计数器变量cnt = 0,用于累计1的个数,只要计数器变量cnt小于202,则继续累计,直至cnt大于或等于202,则结束循环。代码如下:

接着,声明一个int类型变量i = 1,表示从第1页开始数。在循环中对变量i进行拆分。

所谓拆分,其实就是提取变量i的每一位数字,判断每一位数字是否等于1,如果等于1则计数器+1。拆分变量i会导致更改变量i的值,而变量i代表页码,不能更改,所以声明一个int类型的变量临时存储变量i的值。代码如下:

:为什么拆分变量i的值需要使用循环?

:因为变量i不清楚是几位数,使用循环可以对一个未知位数的整数进行拆分,通用性较强。

内层循环拆分过程:while(t)表示当t不等于0,则继续拆分。t%10取出个位数,t/10删除个位数。如此循环,一个未知位数的十位数字以上的数字会不断往右移,最终最高位变成个位时,再除以10就变成0,此时t = 0,也就拆分完,循环条件为假,退出循环。变量i++表示换下一页。代码如下:

最后就是输出,其中变量i代表页码。而变量在最后一次循环时表示最后一页,而循环最后一步是i++,此时变量就会比最后一页的页码大了1,所以输出时要-1。代码如下:

数据类型:最后一页的页码肯定不会很大,所有数据可选int类型。

解疑

:本题最后一页的页码会不会不存在数字1,例如300?

:不可能。因为数到最后一个1时才是最后一页,所以最后一页的页码肯定含有数字1。

:假设数到第391页时刚好有202个1,那么391~400页都可能是最后一页,是否存在多种答案?

:题目一般都会比较严谨,而经过测试最后一页的页码是510,,只有一个答案。

运行结果

参考代码 - C++

参考代码下载链接

https://pan.baidu.com/s/1dAJEsdYMDHGhPdL31LvWTg

提取码:dsbc

END

注:题目来源于粉丝求助,点击下方的【阅读原文】即可打开本题源码下载链接。

题解属于本微信公众号【大神编程】原创。

impala的substr从第几位截到最后一位_【题解循环嵌套】书的最后一页(粉丝求助)...相关推荐

  1. js截串后三位 截串从第一位到倒数第二位

    js String对象的截串方法们. 其实在W3school中方法们都有介绍,主要具体写一下应用 1⃣️ stringObject.substr(start,length) 此方法是获取从,指定索引开 ...

  2. 一个数三位立方和相加等于本身_【题解信奥】打印水仙花数(粉丝求助)

    前言 本题来源于粉丝的求助. 关于粉丝求助的问题,我们会按照先后顺序来解答,并从公众号后台回复答案和解析. 打印水仙花数时间限制: 1000 ms    内存限制: 65536 KB [题目描述] 打 ...

  3. impala的substr从第几位截到最后一位_冰雪奇缘2彩蛋:片名内含深意,艾莎是第13位公主象征着背叛...

    <冰雪奇缘2>自上映以来就几乎霸屏了国内外各大电影院的档期,甚至引起了韩国导演的集体抗议,这部时隔6年的优秀作品又再一次的带给观众们绝美的视听盛宴的同时也在不断的超越自己,喜爱迪士尼.喜爱 ...

  4. impala的substr从第几位截到最后一位_天赋不输乔丹,麦迪选秀为何只排第9?看前面几位,第1让老詹吃瘪...

    对于NBA球员来说,选秀几乎等同于"出身".选秀顺位越高也往往决定着你在未来球队中的定位,虽然有不少2轮秀打出来的,但毕竟是少数,NBA大部分球星都是高顺位选秀出来的,这也看出了选 ...

  5. 关于18位身份证号码最后一位计算(Java实现)

    关于18位身份证号码最后一位计算(Java实现) 现代的身份证号码长度都是18位的,但是只要知道前17位便可推出第18位数字或者字母(第18位为0,1,...,9和X中的一个).也就是说,国内不存在前 ...

  6. 数据库存储时间戳,13位时间戳转换位10位时间戳

    最近在做无忧云枢项目,需要对接抖音快手的API,再对接京东的开普勒API文档, 在我们设计数据库时,时间戳存储到数据库时,一般情况下,我会设计存储类型int 长度11,但是在对接API文档过程中,时间 ...

  7. 前端保留两位有效数字_js保留两位小数方法总结

    本文是小编针对js保留两位小数这个大家经常遇到的经典问题整理了在各种情况下的函数写法以及遇到问题的分析,以下是全部内容: 一.我们首先从经典的"四舍五入"算法讲起 1.四舍五入的情 ...

  8. GX3001Q ui 8位色 升级为16位色相关说明

    GX3001Q ui 8位色 升级为16位色相关说明3001Q ui主要目前主要有2种类别,一种是16位色方案,一种是8位色方案,均使用bmp格式图片.8位色指的是UI系统使用的bmp是8位色的.16 ...

  9. 位运算+取某一位+java_Java位运算小节

    2019新春支付宝红包技术大揭秘在线峰会将于03-07日开始,点击这里报名届时即可参与大牛互动. 位运算表达式由操作数和位运算符组成,实现对整数类型的二进制数进行位运算.位运算符可以分为逻辑运算符(包 ...

最新文章

  1. 派生类到基类的转换 和基类到派生类的转换
  2. ASP.NET WebApi 基于分布式Session方式实现Token签名认证
  3. python中的列表生成式
  4. 通过扫码打开IOS的App Store下载APP(Android版暂时没找到解决方法)
  5. android 成长日记 8.Fragment学习之方法回调
  6. android集成测试工具,android – 集成测试和Cucumber测试
  7. linux之vim怎么跳到指定的一行
  8. zeromq php server,zeromq   php 轻量级队列
  9. python笔记01_高级特性和函数式编程
  10. 中间键 csrf跨站请求伪造 装饰器相关 auth模块
  11. atitit.常用编程语言的性能比较 c c++ java
  12. WebApp的自动测试工具: Jenkins
  13. vbs表白代码+整人代码,抖音vbscript表白代码
  14. html字体外颜色轮廓,文字轮廓效果
  15. python:金额数字转为人民币大写
  16. HTML5 table表格合并单元格和合并边框
  17. 密集预测任务的多任务学习综述
  18. Ever-Flowers IN Never-Dream(16)
  19. 在 MySQL 数据库中删除重复记录的步骤
  20. 解决国内网页无法加载reCaptcha的方法

热门文章

  1. 推荐7款新鲜出炉的HTML5/CSS3应用
  2. how to create view (windows)
  3. 大白话系列之C#委托与事件讲解(一)
  4. Starting HAL daemon:[FAILED]
  5. Box2dの自定义多边形
  6. 研发效能改进的实践方法
  7. DDD领域驱动设计 — 贫血模型与充血模型
  8. Nacos真香,从零到一学起来
  9. 熬了一个通宵,终于把7千万个Key删完了
  10. 基于CAP模型设计企业级真正高可用的分布式锁