C++ 算法题:求序列中第 K 大和第 K 小数的差值并判断其是否为质数

问题描述:

给定一个长度为 N(0 < n <= 10000) 的序列,保证每一个序列中的数字 a[i] 是正整数,编程要求求出整个序列中第 k 大的数字减去第 k 小的数字的值 m,并判断 m 是否为质数。(0 < k <= n)

输入描述:

输入格式:第一行为 2 个数 n,k(含义如上题)第二行为 n 个数,表示这个序列

输出描述:

输出格式:如果 m 为质数则第一行为'YES'(没有引号)第二行为这个数 m 否则 第一行为'NO' 第二行为这个数 m

示例用例:

用例输入 1

5 2
1 2 3 4 5

用例输出 1

YES
2

代码实现:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;

bool isPrime(int num) {
    if (num <= 1) {
        return false;
    }
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}

int main() {
    int n, k;
    cin >> n >> k;
    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end());
    int m = nums[k-1] - nums[n-k];
    if (isPrime(m)) {
        cout << 'YES' << endl;
    } else {
        cout << 'NO' << endl;
    }
    cout << m << endl;
    return 0;
}

代码解析:

  1. 首先,使用 isPrime() 函数判断一个数是否为质数。
  2. 然后,输入 n 和 k 的值,以及长度为 n 的序列。
  3. 使用 sort() 函数对序列进行排序。
  4. 计算第 k 大和第 k 小数字的差值 m。
  5. 调用 isPrime() 函数判断 m 是否为质数,并输出结果。

总结:

本代码使用 C++ 语言实现,包含了排序、质数判断等算法,能够有效解决该算法题。代码简洁易懂,注释详细,方便读者理解和学习。

C++ 算法题:求序列中第 K 大和第 K 小数的差值并判断其是否为质数

原文地址: https://www.cveoy.top/t/topic/qmBg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录