//从n个数中查找最大的k个数
#include<iostream>
#include<vector>
using namespace std;
void input(int& i){
i=rand()%100;
}
void print(int i){
cout<<i<<" ";
}
int f(vector<int>& v,int p){//v中比p大的数的个数
int account=0;
for(int i=0;i<v.size();i++){
if(v[i]>=p)account++;
}
return account;
}
int main(){
int n;cout<<"input n\n";cin>>n;
int k;
vector<int> v(n);
for_each(v.begin(),v.end(),input);//初始化v
for_each(v.begin(),v.end(),print);cout<<endl;//输出v
cout<<"input k\n";cin>>k;
int min,max;
min=0;max=100;
int p;//比p大的数如果有k个,那么p就是所求的数。否则,查找p
while(1){
p=(min+max)/2;
int acc=f(v,p);
if(acc>k){
min=p;
}
else{
if(acc==k){
//输出比k大的所有的数
for(int i=0;i<v.size();i++){
if(v[i]>=p) cout<<v[i]<<" ";
}
cout<<endl;
break;
}
else{
max=p;
}
}
}
system("pause");
}
编程之美2.5查找最大的k个数method2
最新推荐文章于 2023-08-03 02:06:56 发布