#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;
}
您看看提交能不能过。
不知道你这个问题是否已经解决, 如果还没有解决的话: