T417268题解
T417268题解
题目传送门
首先,我们先构思一下思路:
解法一:在给出范围中,求出题目中所说的幸运数,直接输出,并count++一下。最后输出count就行。
代码过于简单,暂不提供(其实是没写)
解法二:在给出范围中,求出题目中所说的幸运数,放入数组,最后输出里面的数字,输出大小即可。
Q:数组大小不可变,怎么办?
A:用向量。
上c++代码(思路全在注释里)。:
#include <iostream>
#include <vector>
using namespace std;
// 计算给定数字的因子数量的函数
int count_divisors(int num) {
int count = 0;
// 循环遍历潜在的因子,直到num的平方根
for (int i = 2; i <= num / i; ++i) {
if (num % i == 0) {
// 检查因子是否相同(例如,对于完全平方数)
if (i == (num / i)) {
count += 1;
} else {
count += 2;
}
}
}
return count;
}
// 在给定范围内查找幸运数字的函数
vector<int> find_lucky_numbers(int n, int m) {
vector<int> lucky_numbers;
// 遍历范围[n, m]
for (int num = n; num <= m; ++num) {
// 检查因子的数量是否为8
if (count_divisors(num) == 8) {
lucky_numbers.push_back(num);
}
}
return lucky_numbers;
}
int main() {
// 输入起始范围和结束范围
int n, m;
cin >> n >> m;
// 调用函数查找给定范围内的幸运数字
vector<int> result = find_lucky_numbers(n, m);
// 输出幸运数字
for (int num : result) {
cout << num << endl;
}
// 输出幸运数字的个数
cout << result.size() << endl;
return 0;
}
当然,不会读不懂c++代码的可以结合Python代码食用。
def count_divisors(num):
count = 0
for i in range(2, int(num**0.5) + 1):
if num % i == 0:
if i == (num // i):
count += 1
else:
count += 2
return count
def find_lucky_numbers(n, m):
lucky_numbers = [num for num in range(n, m + 1) if count_divisors(num) == 8]
return lucky_numbers
# 输入起始范围和结束范围
n, m = map(int, input().split())
result = find_lucky_numbers(n, m)
# 输出幸运数字
for num in result:
print(num)
# 输出幸运数字的个数
print(len(result))
代码仅供复制粘贴提供思路。