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))

代码仅供复制粘贴提供思路。