写点什么

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

作者:知心宝贝
  • 2022 年 7 月 24 日
  • 本文字数:780 字

    阅读完需:约 3 分钟

算法题每日一练---第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
复制代码

四、编码实现

#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;}
复制代码

五、输出结果


输出结果为: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++,最后函数返回的是一个数所有的 2。

发布于: 3 小时前阅读数: 7
用户头像

知心宝贝

关注

公众号:穿越计算机的迷雾 2022.03.07 加入

生于尘埃 溺于人海 死于理想高台

评论

发布
暂无评论
算法题每日一练---第7天:美丽的2_算法_知心宝贝_InfoQ写作社区