3 1 2 5 -1 5 3 1 2 3 4 5 0 0
5 5 4 3
看起来不难,不过还是要注意许多问题;
看这里:
#include<bits/stdc++.h> using namespace std; const int N=100000+10; int a[N]; int main() { int n,m,i,j,f; while(~scanf("%d%d",&n,&m)) { if(n==0&&m==0) break; f=0; for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); if(m>n) { for(i=n-1;i>=0;i--) { printf("%d",a[i]); if(i!=0) printf(" "); } printf("\n"); continue; } for(i=n-1;i>=n-m;i--) { if(a[i]<0)//虽然要求前m的大富翁,但负数就不算是大富翁了,这时就应该全部输出; { j=i; f=1; break; } printf("%d",a[i]); if(i!=n-m) printf(" "); } if(f) for(i=j;i>=0;i--) { printf("%d",a[i]); if(i!=0) printf(" "); } printf("\n"); } return 0; }