寻找大富翁 (25 分)

我就是我 2022-05-09 04:20 237阅读 0赞

胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。

输入格式:

输入首先给出两个正整数N(≤106)和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。

输出格式:

在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。

输入样例:

  1. 8 3
  2. 8 12 7 3 20 9 5 18

输出样例:

  1. 20 18 12
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4. int a[1000001];
  5. int main()
  6. {
  7. int n,m;
  8. cin>>n>>m;
  9. if(n<m)m=n;
  10. for(int i=0;i<n;i++)
  11. cin>>a[i];
  12. sort(a,a+n,greater<int>());
  13. for(int i=0;i<m;i++)
  14. {
  15. if(i!=0)cout<<" ";
  16. cout<<a[i];
  17. }
  18. return 0;
  19. }

堆排序:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int a[1000001];
  4. void HeadAdjust(int a[],int parent,int lenght){
  5. int temp=a[parent];
  6. int child=2*parent+1;
  7. while(child<lenght){
  8. if(child+1<lenght&&a[child]>a[child+1]){
  9. child++;
  10. }
  11. if(temp<=a[child])break;
  12. a[parent]=a[child];
  13. parent=child;
  14. child=2*child+1;
  15. }
  16. a[parent]=temp;
  17. }
  18. int main()
  19. {
  20. int n,m;
  21. cin>>n>>m;
  22. if(m>n)m=n;
  23. for(int i=0;i<n;i++){
  24. scanf("%d",&a[i]);
  25. }
  26. for(int i=n/2;i>=0;i--){
  27. HeadAdjust(a,i,n);
  28. }
  29. for(int i=n-1;i>=0;i--){
  30. int temp=a[i];
  31. a[i]=a[0];
  32. a[0]=temp;
  33. HeadAdjust(a,0,i);
  34. }
  35. for(int i=0;i<m;i++){
  36. if(i!=0)printf(" ");
  37. printf("%d",a[i]);
  38. }
  39. }

发表评论

表情:
评论列表 (有 0 条评论,237人围观)

还没有评论,来说两句吧...

相关阅读

    相关 寻找富翁25

    胡润研究院的调查显示,截至2017年底,中国个人资产超过1亿元的高净值人群达15万人。假设给出N个人的个人资产值,请快速找出资产排前M位的大富翁。 输入格式: 输入首先