#8878. 小丽找数(循环入门)
小丽找数(循环入门)
特殊数统计
版权信息:
任务总览
任务名称 | 时间限制 | 内存限制 | 分数 |
---|---|---|---|
统计特定数的个数 | 1 sec | 512 MB | 100 points |
题目描述
小丽同学想在 1 ~ n
的范围内找到 这样的一类数:
- 各个位数之和不能被 2 整除,也 不能被 5 整除。
例如:
- **
3
**,各位和为3
,不能被2
或5
整除 ✅ - **
12
**,各位和为1 + 2 = 3
,不能被2
或5
整除 ✅ - **
25
**,各位和为2 + 5 = 7
,不能被2
或5
整除 ✅ - **
30
**,各位和为3 + 0 = 3
,不能被2
或5
整除 ✅ - **
100
**,各位和为1 + 0 + 0 = 1
,不能被2
或5
整除 ✅
请你编写程序,统计 满足条件的数 在 1 ~ n
之间的个数。
输入格式
一个整数 n
,表示范围的上限(1 ≤ n ≤ 9999
)。
输出格式
输出 1 ~ n
之间满足条件的数的个数。
样例
输入
50
输出
20
提示
- 计算位数和:
- 将
num
转换为字符串str(num)
,然后求各个位数字之和。 - 例如:
sum(int(d) for d in str(num))
计算num
的各个位数之和。
- 将
- 判断整除性:
- 如果 位数和
sum_digits
能被 2 或 5 整除,则跳过。 - 否则,计入结果。
- 如果 位数和
时间复杂度分析
步骤 | 复杂度 |
---|---|
遍历1 ~ n |
O(n) |
计算位数和 | O(log n) |
整除性判断 | O(1) |
总复杂度 | O(n log n) |
由于 n
最大为 9999
,最多 4 位数,因此 O(n log n)
完全可行。
总结
- 遍历 1 ~ n,计算 各个位数之和。
- 检查整除性,如果 不能被 2 或 5 整除,则计入结果。
- 时间复杂度 O(n log n),适用于
n ≤ 9999
的范围。
统计
相关
在以下作业中: