蓝桥杯C/C++程序设计——特别数的和

2023-12-31 18:42:56

题目描述

小明对数位中含有 2、0、1、9 的数字很感兴趣(不包括前导 0),在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574。

请问,在 1 到?n?中,所有这样的数的和是多少?

输入描述

输入格式:

输入一行包含两个整数 n(1≤n≤104)。

输出描述

输出一行,包含一个整数,表示满足条件的数的和。

输入输出样例

示例

输入

40

输出

574

运行限制

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

总通过次数: 19015??|??总提交次数: 19790??|??通过率: 96.1%

难度: 简单???标签: 2019, 暴力, 枚举, 省赛

解题过程

#include <iostream>
using namespace std;
int tmp(int a)
{
  int k=0,s=0;
  for(int j=a;j!=0;j=j/10)
  {
    k=j%10;
    if(k==2||k==0||k==1||k==9)
    {
        s++;
    }
  }
  return s;
}
int main()
{
  // 请在此输入您的代码
  int n;
  cin>>n;
  int sum=0,k=0;
  for(int i=1;i<=n;i++)
  {
    if(tmp(i)!=0)
    {
      sum=sum+i;
    }

  }
  cout<<sum;
  return 0;
}

?注意事项

?在编写这个代码过程中,我们应该注意的是,如何将一个数字的个、十、百、千等等拆分出来,进行判断,并且在判断的过程中如果一个数字的不同位置出现了2个或2个以上的题目要求的数字,怎么办,避免重复相加。

  1. 函数 tmp(int a):

    int tmp(int a)
    {
      int k=0,s=0;
      for(int j=a;j!=0;j=j/10)
      {
        k=j%10;
        if(k==2||k==0||k==1||k==9)
        {
            s++;
        }
      }
      return s;
    }
    

    这个函数用于计算整数 a 中包含多少个数字 0、1、2 或 9。该函数包含以下部分:

    • 变量初始化:初始化变量 k 和 s,分别用于存储每个数字和计数。
    • 循环:从个位开始循环拆分数字,循环条件是 j 不等于 0,每次循环结束更新 j 的值为 j/10。
    • 数字判断:通过取余运算获取每次循环中的个位数字 k,然后判断 k 是否为 0、1、2 或 9,如果满足条件则计数器 s 自增。
    • 返回结果:返回计数器 s 的值作为函数的返回值。
  2. 主程序 main():

    int main()
    {
      int n;
      cin>>n;
      int sum=0,k=0;
      for(int i=1;i<=n;i++)
      {
        if(tmp(i)!=0)
        {
          sum=sum+i;
        }
      }
      cout<<sum;
      return 0;
    }
    

    这个主程序实现了以下功能:

    • 输入:从标准输入流中获取一个整数 n,用于确定循环范围。
    • 变量初始化:初始化变量 sum 和 k 为 0,分别用于存储满足条件的数字之和和临时变量。
    • 循环:从 1 开始循环到 n,循环条件是 i 小于等于 n,每次循环结束更新 i 的值加一。
    • 条件判断:对每个数 i 调用 tmp() 函数,判断返回值是否不等于 0,如果满足条件则将当前数 i 累加到 sum 中。
    • 输出:将 sum 输出到标准输出流中。
    • 返回结果:返回 0,表示程序正常结束。

文章来源:https://blog.csdn.net/weixin_66547608/article/details/135318177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。