浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10),其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.
n和m同时为0时表示输入结束.
3 1 2 5 -1 5 3 1 2 3 4 5 0 0
5 5 4 3
怎么说这道题其实一开始就想的是用sort快排来做,没想到结果就真的对了,但相信这也是用栈和队列做的,但目前没想过,所以,在这里就先用快排的方法做了,毕竟简单,所以也就不多解释啥了,快排这种方法看下代码就知道啥意思了,代码如下:
#include<stdio.h>
#include<algorithm>
#define max 100005
using namespace std;
int caifu[max];
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)&&(m!=0||n!=0))
{
for(int i=0;i<n;i++)
{
scanf("%d",&caifu[i]);
}
sort(caifu,caifu+n);
if(m>=n)
{
for(int i=n-1;i>0;i--)
printf("%d ",caifu[i]);
printf("%d\n",caifu[0]);
}
else
{
for(int i=n-1;i>n-m;i--)
printf("%d ",caifu[i]);
printf("%d\n",caifu[n-m]);
}
}
return 0;
}