【题解】 [蓝桥杯 2019 省 B] 特别数的和

题目描述

小明对数位中含有 222、000、111、999 的数字很感兴趣(不包括前导 000),在 111 到 404040 中这样的数包括 111、222、999、101010 至 323232、393939 和 404040,共 282828 个,他们的和是 574574574。

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

输入格式

输入一行包含一个整数 nnn。

输出格式

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

输入输出样例 #1

输入 #1

复制代码
40

输出 #1

复制代码
574

说明/提示

对于 20%20\%20% 的评测用例,1≤n≤101 \le n \le 101≤n≤10。

对于 50%50\%50% 的评测用例,1≤n≤1001 \le n \le 1001≤n≤100。

对于 80%80\%80% 的评测用例,1≤n≤10001 \le n \le 10001≤n≤1000。

对于所有评测用例,1≤n≤100001 \le n \le 100001≤n≤10000。

蓝桥杯 2019 省赛 B 组 F 题。

题目分析

目的:统计满足条件的数的和。

阅读可知,需要满足的条件是:数位中含有2,0,1,92,0,1,92,0,1,9的数字。我们可以遍历1∼n1\sim n1∼n中的每个数字,逐个判断是否满足条件,将满足的条件的数字进行累加。对于条件的判断,我们可以将数字进行拆位,将拆出的每一位数字进行比较。

cpp 复制代码
//拆位
while(x){
  int u=x%10;//数位值
  x/=10;
}

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
using i64 = long long;
const int N = 1e5 + 5;
bool chk(int x){
	//拆位
	while(x){
		int u=x%10;
		//判断是否是2,0,1,9中的一位
		if(u==2||u==0||u==1||u==9)
			return 1;
		x/=10;
	}
	//不符合条件
	return 0;
}
int main(){
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	cout.tie(nullptr);
	int n,sum=0;
	cin>>n;
	//遍历所有数字
	for(int i=1;i<=n;i++){
		//满足条件的数字进行累加
		if(chk(i)) sum+=i;
	}
	cout<<sum;
	return 0;
}
相关推荐
电鱼智能的电小鱼8 分钟前
基于电鱼 AI 工控机的智慧工地视频智能分析方案——边缘端AI检测,实现无人值守下的实时安全预警
网络·人工智能·嵌入式硬件·算法·安全·音视频
孫治AllenSun41 分钟前
【算法】图相关算法和递归
windows·python·算法
格图素书2 小时前
数学建模算法案例精讲500篇-【数学建模】DBSCAN聚类算法
算法·数据挖掘·聚类
DashVector3 小时前
向量检索服务 DashVector产品计费
数据库·数据仓库·人工智能·算法·向量检索
AI纪元故事会3 小时前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉
夏鹏今天学习了吗3 小时前
【LeetCode热题100(59/100)】分割回文串
算法·leetcode·深度优先
卡提西亚3 小时前
C++笔记-10-循环语句
c++·笔记·算法
还是码字踏实3 小时前
基础数据结构之数组的双指针技巧之对撞指针(两端向中间):三数之和(LeetCode 15 中等题)
数据结构·算法·leetcode·双指针·对撞指针
Coovally AI模型快速验证5 小时前
当视觉语言模型接收到相互矛盾的信息时,它会相信哪个信号?
人工智能·深度学习·算法·机器学习·目标跟踪·语言模型
电院工程师5 小时前
SIMON64/128算法Verilog流水线实现(附Python实现)
python·嵌入式硬件·算法·密码学