1. 程式人生 > >計蒜客——浮點數排序

計蒜客——浮點數排序

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