寻找大富翁(25 分)绝对帮你AC型(第一次写博客)真·原创!

寻找大富翁(25 分)

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

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

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

输入样例:
8 3
8 12 7 3 20 9 5 18
输出样例:
20 18 12

  • C++语言
  • CodeBlocks编译器

测试样例

这里写图片描述
自己写的第一种代码一开始没有AC原因是测试点2 3没过,换了种思路写,第二种代码一开始是测试点1 3没过,所以几次测试得出了测试点的样例情形。

  • 测试点0 为普通样例
  • 测试点1 应该是有多个拥有相同资产量的富翁,且这几个富翁恰好处于题目给出m的边界值,也就是说可能m为3,前五个富翁资产为 20 18 18 18 18,这时输出应为20 18 18。
  • 测试点2 给出人数比要列举人数少,假如n为5,m为10。
  • 测试点3 没话说了emmm,把cin cout换成scanf和printf就AC了。这种操作已经在超时情况管用很多次了hhhh

第一种代码

普通sort写法例如:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long num[10000000];
bool cmp(int n1, int n2){
    return n1>n2;
}
int main()
{
    long long n, m, number, sum=0;
    cin>>n>>m;
    for(int i=0;i<n;i++){
        scanf("%d", &number);
        if(number>=0){
            num[i] = number;
            sum++;
        }
        //cin>>num[i];
    }
    sort(num, num+n, cmp);
    for(int i=0;i<m&&i<=sum;i++){
        if(i==0){
            //cout<<num[i];
            printf("%d", num[i]);
        }
        else{
            //cout<<" "<<num[i];
            printf(" %d", num[i]);
        }
    }
    return 0;
}

第二种代码

这个不用sort,设了一个大数组,有点从后往前遍历的意思(自己看一下代码吧)例如:

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
long long num[10000000]={0};

int main()
{
    long long n, m, number, sum=0, max=-1;
    scanf("%d %d", &n, &m);
    //cin>>n>>m;
    for(int i=0;i<n;i++){
        scanf("%d", &number);
        //cin>>number;
        num[number]++;
        if(number>max){
            max = number;
        }
    }
    for(int i=max;i>=0;i--){
        while(num[i]>0){
            if(sum==m){
                break;
            }
            num[i]--;
            if(sum==0){
                printf("%d", i);
                //cout<<i;
            }
            else{
                printf(" %d", i);
                //cout<<" "<<i;
            }
            sum++;
        }
    }
    return 0;
}

自己第一次写博客,希望能帮助别人能快速AC啦,也是督促自己不断总结进步吧!未来的路很长,只有自己加油才可以!!原创点个赞吧~嘻嘻

猜你喜欢

转载自blog.csdn.net/qq_36931762/article/details/82054968