问题标题: 酷町堂:3850哪里错了?

0
0
已解决
吴庞茂旭
吴庞茂旭
资深光能
资深光能

3850   正负数排序

题目描述 Description

现在有n个(10000~ 50000)整数,范围在-1000~1000,
请你设计程序,将这些数据排序后从大到小输出。

输入描述 Input Description

第一行输入一个正整数n(10000~50000)
第二行输入n个空格隔开的整数(-1000~1000)

输出描述 Output Description

输出一行,n个空格隔开的整数。

样例输入 Sample Input

 

5
-1 2 4 -3 5

样例输出 Sample Output

 

5 4 2 -1 -3

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    /*
    freopen("triangle.in","r",stdin);
    freopen("triangle.out","w",stdout);

    */
    int n,t,a[50001];
    cin>>n;
    for(int i=50000;i>=50000-n;i++)
    {
        cin>>t;
        a[t]++; //用桶的下标存这个数,桶的值++
    }
    for(int i=n;i>=1;i--)
        cout<<a[i]<<" ";
    /*
    fclose(stdin);
    fclose(stdout);
    */
    return 0;
}

 


0
已采纳
黄昊轩
黄昊轩
中级守护
中级守护

桶排不能下标是负数,要转成整数,输出时在转回来

 for(int i=1;i<=n;i++)
    {
        cin>>t;
        t=t+1000;
        a[t]++; 
     } 
    for(int i=2001;i>=0;i--)
    {
        for(int j=1;j<=a[i];j++)
        {
            cout<<i-1000<<" ";
        }
    }

 

 

 

0
许金夫
许金夫
初级天翼
初级天翼

你可以使用sort;

数据为a,长度为k,sort(a,a+k);

倒叙输出。

用万能头

0
我要回答