学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!
附上汇总贴:小猴编程C++ | 汇总-CSDN博客
【题目描述】
小猴平时非常喜欢研究数字之间的规律,今天他发现了一种新的数字–特殊数字:若某一个正整数
x
x
x的所包含的十进制数码
d
d
d恰好在整数
x
x
x中出现了
d
d
d次,就称正整数
x
x
x为特殊数字。
例如,
x
=
212
x=212
x=212就是一个特殊数字,因为:
- 个位上的数字 2 2 2在 212 212 212总共出现了 2 2 2次;
- 十位上的数字 1 1 1在 212 212 212总共出现了 1 1 1次;
- 百位上的数字 2 2 2在 212 212 212总共出现了 2 2 2次;
x
=
10
x=10
x=10就不是一个特殊数字,因为
0
0
0出现了
1
1
1次,而不是
0
0
0次。
现在给定两个正整数
n
,
m
n,m
n,m,请你帮助小猴计算出
n
∼
m
n\sim m
n∼m之间所有特殊数字的和。
【输入】
一行,包括两个正整数
n
,
m
n,m
n,m。
【输出】
一行,包含一个正整数,表示结果。
【输入样例】
1 10
【输出样例】
1
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int num[15];
bool check(int x)
{
memset(num, 0, sizeof(num)); // 每次计算要初始化
int t = x; // x的副本
while (t) { // 数位拆分,用桶排序记录每个数字出现的次数
num[t%10]++;
t /= 10;
}
while (x) { // 再做一次数位拆分
int g = x % 10; // 依次判断个位上的数字
if (g!=num[g]) { // 只要有不相等的就返回false
return false;
}
x /= 10;
}
return true; // 如果没有不相等的,返回true
}
int main()
{
int n, m;
cin >> n >> m;
int sum = 0;
for (int i=n; i<=m; i++) { // 枚举n到m之间
if (check(i)) { // 返回true时计算总和
sum += i;
}
}
cout << sum << endl;
return 0;
}
【运行结果】
1 10
1