hdu 2020 绝对值排序

http://acm.hdu.edu.cn/showproblem.php?pid=2020

题目大意

输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等,输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。

Sample Input

3 3 -4 2

4 0 1 2 -3

0

Sample Output

-4 3 2

-3 2 1 0

方法与总结

  • 将负数转换为正数
  • 利用sort进行排序
  • 将转换后的数转换成负数再输出

代码

#include<iostream>
#include<algorithm> 
using namespace std;

struct Num{
    int n;
    bool mark;
};

bool cmp(Num a,Num b)
{
    return a.n>b.n;
}

int main()
{
    int n;
    while(cin>>n && n!=0)
    {
        Num *p=new Num[n];
        for(int i=0;i<n;i++)
        p[i].mark=0;
        for(int i=0;i<n;i++)
        {
            cin>>p[i].n;
            if(p[i].n<0)
            {
                p[i].n=-p[i].n;
                p[i].mark=1;
            }
        }
        sort(p,p+n,cmp);
        for(int i=0;i<n;i++)
        {
            if(p[i].mark==1)
                p[i].n=-p[i].n;
            cout<<p[i].n;
            if(i<n-1)
                cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}
/* bottom:40px 距浏览器底部距离 right:40px 距浏览器右边距离 */