时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:6191
解决:1309
-
题目描述:
-
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
-
输入:
-
每个测试案例包括2行:
第一行为2个整数n,k(1<=n,k<=200000),表示数组的长度。
第二行包含n个整数,表示这n个数,数组中的数的范围是[0,1000 000 000]。
-
输出:
-
对应每个测试案例,输出最小的k个数,并按从小到大顺序打印。
-
样例输入:
-
8 44 5 1 6 2 7 3 8
-
样例输出:
-
1 2 3 4
-
-
AC代码:
-
#include<stdio.h> #include<algorithm> using namespace std; int a[200003]; int main() { int n,k,i; while(scanf("%d%d",&n,&k)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i=0;i<k-1;i++) printf("%d ",a[i]); printf("%d\n",a[k-1]); } return 0; }
-
超时代码:
-
#include<stdio.h> #include<stdlib.h> int a[200005]; int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; } int main() { int n,k,i; while(scanf("%d%d",&n,&k)!=EOF) { for(i=0;i<n;i++) scanf("%d",&a[i]); qsort(a,n,sizeof(a[0]),cmp); for(i=0;i<k-1;i++) printf("%d ",a[i]); printf("%d\n",a[k-1]); } return 0; }
-
#include<iostream> #include<set> using namespace std; int main() { multiset<int> mset; multiset<int>::iterator j; int n,k,t,i; while(cin>>n>>k) { mset.clear(); for(i=0;i<n;i++) { cin>>t; mset.insert(t); } for(j=mset.begin(),i=0;i<k-1;i++,j++) cout<<*j<<" "; cout<<*j<<endl; } return 0; }
import java.util.Scanner; import java.util.Arrays; public class Main { public static void main(String[] argc){ Scanner in=new Scanner(System.in); int []a=new int[200005]; while(in.hasNext()){ int n=in.nextInt(); int k=in.nextInt(); for(int i=0;i<n;i++) a[i]=in.nextInt(); Arrays.sort(a, 0, n); for(int i=0;i<k-1;i++) System.out.print(a[i]+" "); System.out.println(a[k-1]); } in.close(); } }