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

e40a7d34a696f40fb833b4eee9459762.png前言

本题来源于粉丝的求助。

04a937b326b0276363de64c681bd2afa.png

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

ec8caec709938345963885eab8b38f02.png 3a873ffcc96acf4455aeac32d13b9121.png书的最后一页 时间限制: 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,则结束循环。代码如下:

cf1b0ccd456bf336fcae48e75aa1559f.png

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

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

26a828cc8afd16eeb8cf4e4d26d8a3ef.png

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

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

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

88ada01a9216036c5aa9a07bcbf061a6.png

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

9c343a0fa1e597e22579388d974421cd.png

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

解疑

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

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

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

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

运行结果

c3de55b45645d612aaf056f3001fbb16.gif

参考代码 - C++

33944fcb992fa087cf195ca86fcfbde0.png

参考代码下载链接

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

提取码:dsbc

END

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

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

26f9fc1b787bfa40508c3f41d1814950.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值