計蒜客——浮點數排序
阿新 • • 發佈:2018-11-28
1.題目描述:
2.演算法分析:
首先肯定是定義一個double型別陣列存放資料,然後的一個問題是怎麼判斷浮點數最近的整數的差,
使用round函式即可
floor : 不大於自變數的最大整數
ceil :不小於自變數的最大整數
round:四捨五入到最鄰近的整數
floor(),ceil() 需包含標頭檔案math函式庫
具體可以查C++幫助文件
然後我們使用C++的sort函式進行排序,寫一個自定義排序方法cmp
當發現
兩個浮點數相同則按照原來的大小排列
而不相等則按照誰離整數最近誰在前
3.原始碼:
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const double EPSILON = 1e-6;
double num[105];
bool cmp(double x,double y){
double dx = fabs(x - round(x));
double dy = fabs(x - round(y));
if(fabs(dx - dy) < EPSILON){
return x < y;
}
return dx < dy;
}
int main(){
int N;
scanf("%d", &N);
for (int i = 0 ; i < N ; i++){
scanf("%lf", &num[i]);
}
sort(num , num + N , cmp);
for (int i = 0 ; i < N ; i++){
if(i != N - 1){
printf("%.6lf ", num[i]);
}else{
printf ("%.6lf\n", num[i]);
}
}
return 0;
}
可以關注一下Blog:http://47.107.118.184