关于#c++#的问题:给定一个长度为N(0< n< =10000)的序列,保证每一个序列中的数字a[i]是正整数 ,编程要求求出整个序列中第k大的数字减去第k小的数字的值m

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
bool isPrime(int num) {
    if (num <= 1) {
        return true;
    }
    for (int i = 2; i <= sqrt(num); i++) {
        if (num % i == 0) {
            return true;
        }
    }
    return false;
}
int main() {
    int n, k;
    cin >> n >> k;
    int a[n];
    vector<int> sequence(n);
    for (int i = 0; i < n; i++) 
        cin >> sequence[i];
    for(int i=0;i<n;i++)
    {
        for(int j=i+1;j<n;j++)
        {
            if(a[i]>a[j])
            {
                int m;
                m=a[i];
                a[i]=a[j];
                a[j]=m;    
            }
        }
    }
    sort(sequence.begin(), sequence.end());
    int diff=sequence[n - k]-sequence[k - 1];
    if((diff)==2)
        cout<<"YES"<<endl;
    else
        cout << (isPrime(diff) ? "YES" : "NO") <<endl;
    cout<<(diff);
    return 0;
}

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

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

输出:
如果m为质数则第一行为YES
第二行为这个数m
否则
第一行为NO
第二行为这个数m

求:如何将其完善,并更加简洁┭┮﹏┭┮(欢迎更加完美🆒的代码)

(又是做C++做到崩溃的一天)o(≧口≦)o


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    int k;
    cin>>n>>k;
    int a[n+1];
    for(int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
    int maxn=a[k];
    int minn=a[n-k+1];
    int m=minn-maxn;
    if(m==1||m==0) 
    {    
        cout<<"NO"<<endl;
        return 0;
    }
    for(int i=2;i<=sqrt(m);i++)
    {
        if(m%i==0) 
        {
            cout<<"NO"<<endl;
            return 0;
        }
    }
    cout<<"YES"<<endl;
    return 0;
}

这道题可以用STL库来做,这样会如你心愿--更加的简洁。
我就直接用代码来呈现吧:

#include<iostream>
#include<algorithm>
using namespace std;

const int MAXN=10005;

int num[MAXN],n,k,ans;

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

int main()
{
    cin>>n>>k;
    for(int i=1;i<=n;i++)
    {
        cin>>num[i];
    }
    sort(num+1,num+n+1);
    ans=num[k]-num[n-k];
    if(isPrime(ans)) cout<<"Yes";
    else cout<<"No";
    return 0;
}
 

您看看提交能不能过。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^