我们有N个正浮点数,均小于10000.0。现在需要将这些浮点数按照离它最近的整数的差从小到大排序,浮点数与距离最近的整数的差越小,这个浮点数的排位越靠前;如果差相等,按照浮点数的值从小到大排序。
#include<iostream>
#include<cmath>
#include<algorithm>
#define EPSILON 1e-6
using namespace std;
int cmp(double a, double b)
{
if (fabs(a - b) < EPSILON)
{
return a < b;
}
else
{
return fabs(a - round(a)) < fabs(b - round(b));
}
}
int main() {
int n;
cin >> n;
double mm[105];
for (int i = 0; i < n; i++)
{
cin >> mm[i];
}
sort(mm, mm + n, cmp);
for (int i = 0; i < n; i++)
{
if (i != n - 1)
{
printf("%.6lf ", mm[i]);
}
else
{
printf("%.6lf", mm[i]);
}
}
return 0;
}