0
点赞
收藏
分享

微信扫一扫

算法题每日一练---第7天:美丽的2

一、问题描述

小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个年份的数位中包含数字 2?

二、题目要求

考察

1.循环判断,计数
2.建议用时5~15min

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 128M

三、问题分析

题目要求求出在1到2022的范围内有多少个年份包含2,我们只需要对每一个年份进行判断就行了,比如构造一个单独的函数用来判断,其结果返回bool型变量,bool变量包含两个结果,true代表1可执行。false代表0,不可执行。

while(k)
{
    if(k%10==2) return true;//如果当前位置包含2,返回true
    k=k/10;//对下一位进行判断
}
return false;//所有位数都不包含2,返回false

四、编码实现

```c++
#include<iostream>
using namespace std;
bool judge(int k)//bool型函数
{
while(k)
{
if(k%10==2) return true;//如果当前位置包含2,返回true
k=k/10;//对下一位进行判断
}
return false;//所有位数都不包含2,返回false
}
int main()
{
int i,n=2020,sum=0,k;//初始化n sum的值
for(i=1;i<=n;i++)//for循环进行判断
{
k=i;
if(judge(k))//如果判断成功,sum++
{
sum++;
}
}
cout<<sum;//输出sum
return 0;
}


## 五、输出结果
![1.png](https://s4.51cto.com/images/blog/202203/19083650_623525a23bc3028180.png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_20,type_ZmFuZ3poZW5naGVpdGk=)
输出结果为:563
## 六、拓展延伸

如果把题目改成:小蓝特别喜欢 2,今年是公元 2020 年,他特别高兴。 他很好奇,在公元 1 年到公元 2020 年(包含)中,有多少个数字 2?

拓展之后,总体思路和上面的题目差不多。第一步,使用for循环1到2020之间所有的年份。用一个while循环判断这个年份是否存在2,假设当前年份是n。n%10如果等于2那么代表2的个数的sum++,然后对n进行除10运算,直到n的数值等于0,退出while循环。

需要把主函数里面的sum++位置放在judge函数里面,如果if(k%10==2)的话,计数器sum+1,最后函数返回的是一个数所有的2。
举报

相关推荐

0 条评论