每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.
请输出乌镇前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行.
3 1 2 5 -1 5 3 1 2 3 4 5 0 0
5 5 4 3
#include <stdio.h> #include <string.h> int cmp(int *a,int *b) { return *b-*a; } int main() { int n,m,a[100000]; while(scanf("%d%d",&n,&m)!=EOF && n*m!=0) { if(m>n)m=n; for(int i=0;i<n;i++)scanf("%d",&a[i]); qsort(a,n,4,cmp); for(int i=0;i<m;i++)printf("%d ",a[i]); printf("\n"); } }
#include<iostream> #include<algorithm> using namespace std; int cmp(int a,int b){ return a>b; } int main(){ int n,m; while(cin>>n>>m){ int* money=new int[n]; for(int i=0;i<n;i++) cin>>money[i]; sort(money,money+n,cmp); if(m>=n){ for(int i=0;i<n;i++) cout<<money[i]<<' '; } else{ for(int i=0;i<m;i++) cout<<money[i]<<' '; } cout<<endl; } }
#include<stdio.h> int main() { int i,j,n,m,a[100001]; scanf("%d%d",&n,&m); //1.输入 for(i=0;i<n;i++) scanf("%d",&a[i]); //2.找m个最大的 int num=0,max,maxindex,n1=n;//保证输出个数别超出n个 for(i=0;i<m;i++) { max=a[0];maxindex=0; for(j=1;j<n;j++) if(a[j]>max) { max=a[j];maxindex=j; } //把最大值消除循环前移 for(j=maxindex;j<n-1;j++) a[j]=a[j+1]; n--;//数组减掉一位 num++;//表示要出输出一个数 if(num<=n1) printf("%d ",max); else break; } return 0; }
#include <stdio.h> #include <algorithm> #define N 100000 using namespace std; int buf[N]; bool cmp(int a, int b) { return a>b; } int main() { int n, m; while(scanf("%d %d", &n, &m)!=EOF) { for(int i=0; i<n; i++) scanf("%d", &buf[i]); sort(buf, buf+n, cmp); if(m>n) m=n; bool isFirst=true; for(int i=0; i<m; i++) { if(isFirst) isFirst=false; else printf(" "); printf("%d", buf[i]); } printf("\n"); } return 0; }
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n,m; while (in.hasNext()) { n=in.nextInt(); m=in.nextInt(); if(n==0&&m==0) break; int[] arr=new int[n]; for(int i=0;i<n;i++) arr[i]=in.nextInt(); Arrays.sort(arr); int j=0; for(j=arr.length-1;j>=arr.length-m;j--) { if(j>=0) System.out.print(arr[j]+" "); } System.out.println(); } } }
def quick_sort(a, l, r): if l >= r: return a first = l last = r m = a[l] while first < last: if first < last and a[last] <= m: last-=1 a[first] = a[last] if first < last and a[first] >= m: first+=1 a[last] = a[first] a[first] = m quick_sort(a, l, first-1) quick_sort(a, first+1, r) return a if l >= r: return a[l:r] def bigrich(l, n,m): res=quick_sort(l, 0, n-1) arr=[] for i in res: arr.append(str(i)) res = arr if m > n: print(' '.join(res)) else: print(' '.join(res[:m])) while True: try: n, m = map(int, input().split()) l = list(map(int, input().split())) bigrich(l, n, m) except: break
#include<stdio.h> #include<queue> using namespace std; int main(){ priority_queue<int> Myqueue; int n,m; while(scanf("%d%d",&n,&m)!=EOF){ if(n==0&&m==0) break; for(int i=0;i<n;i++){ int tmp; scanf("%d",&tmp); Myqueue.push(tmp); } for(int i=0;i<m;i++){ if(Myqueue.size()==0) break; printf("%d ",Myqueue.top()); Myqueue.pop(); } printf("\n"); } }
#include <iostream> #include <queue> using namespace std; int main() { int n, m; while (cin >> n >> m) { priority_queue<int>myPriorityQueue; while (n--) { int data; cin >> data; myPriorityQueue.push(data); } while (m-- && !myPriorityQueue.empty()) { cout << myPriorityQueue.top() << " "; myPriorityQueue.pop(); } cout << endl; } return 0; }
//采用优先队列的做法,原理就是大根堆了 #include "stdio.h" #include "queue" using namespace std; int main(){ int n,m;//n为镇上人数,m为要找的大富翁数 priority_queue<int> myPQueue; int temp; while(scanf("%d%d",&n,&m) != EOF){ if(n==0 && m==0) break; for(int i=0; i<n; ++i){ scanf("%d",&temp); myPQueue.push(temp); } if(n >= m){ for(int i=0; i<m; ++i){ printf("%d ",myPQueue.top()); myPQueue.pop(); } }else{ for(int i=0; i<n; ++i){ printf("%d ",myPQueue.top()); myPQueue.pop(); } } printf("\n"); } }
#include <cstdio> #include <algorithm> using namespace std; bool comp(int lhs, int rhs) { return lhs > rhs; //降序排序 } int main() { int n, m; while (scanf("%d %d", &n, &m) != EOF) { int arr[n]; for(int i = 0; i < n; ++i){ scanf("%d", &arr[i]); } sort(arr, arr + n, comp); if (n>m) { for(int i = 0; i < m; ++i){ printf("%d ",arr[i]); } printf("\n"); }else{ //n<m for(int i = 0; i < n; ++i){ printf("%d ",arr[i]); } printf("\n"); } } return 0; }
using namespace std;
bool cmp(int a,int b){
return a>b;
}
int main(){
int n,m;
while(cin>>n>>m){
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n,cmp);
if(n>m){
for(int i=0;i<m;i++){
cout<<a[i]<<" ";
}
}
else{
for(int i=0;i<n;i++){
cout<<a[i]<<" ";
}
}
cout<<endl;
}
return 0;
}
#include <iostream> #include <cstdio> #include <queue> using namespace std; int main() { int n,m; while(scanf("%d%d",&n,&m)!=-1){ if(n==0){ break; } priority_queue<int> myqueue; for(int i=0;i<n;i++){ int temp;cin>>temp; myqueue.push(temp); } for(int i=0;!myqueue.empty()&&i<m;i++){ cout<<myqueue.top()<<" "; myqueue.pop(); } cout<<endl; } }
//ky123寻找大富翁 #include<algorithm> #include<stdio.h> using namespace std; int main(){ int n,m; while(scanf("%d %d",&n,&m)!=EOF){ if(n==0 && m==0) break; else{ int *num=(int *)malloc(sizeof(int)*n); for(int i=0;i<n;i++){ int temp; scanf("%d",&temp); num[i]=temp; } if(m>=n){ sort(num,num+n); for(int j=n-1;j>=0;j--) printf("%d ",num[j]); } else{ sort(num,num+n); for(int k=n-1;k>=n-m;k--) printf("%d ",num[k]); } } printf("\n"); } }
#include<iostream> #include<cstdio> #include<string> #include<algorithm> using namespace std; const int N=100005; bool cmp(int a,int b) { return a>b; } int main(void) { int n,m; while(scanf("%d%d",&n,&m)!=EOF) { int a[N]; for(int i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); if(n>m) for(int i=0;i<m;i++) printf("%d ",a[i]); else for(int i=0;i<n;i++) printf("%d ",a[i]); puts(""); } return 0; }样例真的坑,我以为 n=0 m=0 程序才结束。。。。。
#include<iostream> #include<algorithm> using namespace std; int main(){ int n,m; while(cin>>n>>m){ int arr[n]; for(int i=0;i<n;i++) scanf("%d",&arr[i]); sort(arr,arr+n); if(n>=m) for(int i=n-1;i>=n-m;i--) printf("%d ",arr[i]); else for(int i=n-1;i>=0;i--) printf("%d ",arr[i]); } }
//优先级队列解决 #include<iostream> #include<queue> using namespace std; int main(){ int n, m; priority_queue<int> qu; while(cin>>n>>m && n){ while(!qu.empty()) qu.pop(); int tmp; for(int i=0; i<n; i++){ cin>>tmp; qu.push(tmp); } for(int i=0; i<n && i<m; i++){ cout<<qu.top()<<' '; qu.pop(); } cout<<endl; } return 0; }