题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2020
题解:
更新版本:主要是再排序函数上,增加直接判断绝对值的大小
以前版本:本题主要是用结构体的flag标记是正数还是负数,排序后根据标记输出即可
AC代码:
更新版本:
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100 + 5;
bool cmp(int a, int b) {
return abs(a) > abs(b);
}
int main() {
int N, temp, f[maxn] = { 0 };
while (cin >> N && N != 0) {
for (int i = 0; i < N; i++) {
cin >> f[i];
}
sort(f, f + N, cmp);
for (int i = 0; i < N; i++) {
if (i == N - 1)//控制输出格式
cout << f[i];
else
cout << f[i] << " ";
}
cout << endl;
}
return 0;
}
以前版本:
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 100 + 5;
struct Info {
int value;
bool flag;//用于标记是正数还是负数
};
//初始化结构体
void Init(Info f[]) {
for (int i = 0; i < maxn; i++) {
f[i].value = 0;
f[i].flag = true;
}
}
//结构体排序
bool cmp(Info infor1, Info infor2) {
return infor1.value > infor2.value;
}
int main() {
int N, temp;
while (cin >> N && N != 0) {
Info f[maxn];
Init(f);
for (int i = 0; i < N; i++) {
cin >> temp;
if (temp < 0) {
temp = -temp;
f[i].flag = false;//负数标记为false
}
f[i].value = temp;
}
sort(f, f + N, cmp);
for (int i = 0; i < N; i++) {
if (!f[i].flag) f[i].value = -f[i].value;//为flag则表明是负数
if (i == N - 1)//控制输出格式
cout << f[i].value;
else
cout << f[i].value << " ";
}
cout << endl;
}
return 0;
}