链接:https://www.nowcoder.com/questionTerminal/cc727473d1e248ccb674eb31bd8683dc
来源:牛客网
找出n个数里最小的k个
输入描述:
每个测试输入包含空格分割的n+1个整数,最后一个整数为k值,n 不超过100。
输出描述:
输出n个整数里最小的k个数。升序输出
示例1
输入
3 9 6 8 -10 7 -11 19 30 12 23 5
输出
-11 -10 3 6 7
第一种方法,用容器:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main(){
vector<int> v;
int num;
while(cin>>num){
v.push_back(num);
}
int k=v[v.size()-1];
v.pop_back();
sort(v.begin(),v.end());
for(int i=0;i<k;++i)
{
cout<<v[i];
if(i!=k-1)
cout<<" ";
}
return 0;
}
第二种方法用数组:
#include<stdio.h>
#include <set>
using namespace std;
int main(){
int a[100],n=0,temp,geshu;
set<int> s;
char ch;
while(scanf("%d%c",&temp,&ch)){
a[n++]=temp;
s.insert(temp);
if(ch=='\n')
break;
}
geshu=a[n-1];
set<int>::iterator it;
it=s.find(geshu);
s.erase(it);
int k=0;
for(it=s.begin();it!=s.end();it++,k++)
{
if (k<geshu)
printf("%d ",*it);
else
break;
}
system("pause");
return 0;
}