【杭电】[2020]绝对值排序

这里写图片描述

想想这一题第一次见时候没写出来……
这次写得貌似也是有点麻烦

#include<stdio.h>
#include<algorithm>
using namespace std;
struct numm {
    int m,flag;
} a[120];
bool vs(numm A,numm B) {
    return A.m>B.m;
}
int main() {
    int n;
    while(scanf("%d",&n),n) {
        for(int i=0; i<n; i++) {
            scanf("%d",&a[i].m);
            if(a[i].m<0) {
                a[i].flag=1;
                a[i].m=-a[i].m;
            } else
                a[i].flag=0;
        }
        sort(a,a+n,vs);
        for(int i=0; i<n; i++) {
            if(a[i].flag)
                printf("-");
            printf("%d",a[i].m);
            if(i<n-1)
                printf(" ");
        }
        printf("\n");
    }
    return 0;
}

20160404补充:

调用sort并自定义绝对值比较函数

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b) {
    return abs(a)>abs(b);
}
int main() {
    int n;
    int a[120];
    while(scanf("%d",&n),n) {
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        sort(a,a+n,cmp);
        for(int i=0; i<n; i++) {
            printf("%d",a[i]);
            if(i==n-1)
                printf("\n");
            else
                printf(" ");
        }
    }
    return 0;
}

题目地址:【杭电】[2020]绝对值排序

原文地址:https://www.cnblogs.com/BoilTask/p/12569823.html