输入 3 个整数,按绝对值从小到大排序。
输入格式
输入包含 3 个int
范围内的整数,用空格隔开。
输出格式
输出一行,包含三个数,用空格隔开。
若两个数字的绝对值一样,则比较两个数字的大小。
这道题虽然只要求排序3个数,但如果列举所有可能性的话会显得杂糅。我才开始考虑用二维数组,因为涉及到绝对值。但最好的方法当然是把输入的数和它的绝对值放到结构体里面呀。然后用快速排序自定义排序规则就好。
才学c++不久,欢迎大佬指正。
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
struct T{
int s,j;
}cp[3];
bool cmp(T a,T b){
if(a.j==b.j && a.s*b.s<0)
return a.s<b.s;
if(a.j!=b.j)
return a.j<b.j;
}
int main(){
for(int i=0;i<3;i++){
cin>>cp[i].s;
cp[i].j=abs(cp[i].s);
}
sort(cp,cp+3,cmp);
for(int i=0;i<3;i++)
cout<<cp[i].s<<" ";
return 0;
}