http://acm.hdu.edu.cn/showproblem.php?pid=2020
题目大意
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等,输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
Sample Input
3 3 -4 2
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;
}