您的位置:程序门 -> 专题开发/技术/项目 -> 数据结构与算法



求给出一个小数,得出与0, 0.25, 0.5, 0,75,1这组数种那个差值最小


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


求给出一个小数,得出与0, 0.25, 0.5, 0,75,1这组数种那个差值最小[已结贴,结贴人:jinyut]
发表于:2007-12-14 17:39:55 楼主
求给出一个小数,得出与0,   0.25,   0.5,   0,75,1这组数种那个差值最小

例如:
0.49   小于   0.5   大于0.25   但更偏近于0.5     所以返回0.5
0.79   小于   1       大于0.75   但更偏近于0.75   所以返回0.75
0.12   小于   0.25大于0         但更偏近于0         所以返回0
发表于:2007-12-14 18:03:121楼 得分:15
接点分,嘻嘻
c/c++ code
#include <stdio.h> #include <math.h> #include <stdlib.h> int main() { double a[8]={0.0,0.25,0.5,0.75,1.0}; double b,min = 1<<16; int i,j,k=0; scanf("%lf",&b); for(i=0;i<5;i++) { if(min>fabs(b-a[i])) { min = fabs(b-a[i]); k=i; } } printf("%lf\n",a[k]); system("pause"); }
发表于:2007-12-14 18:15:562楼 得分:0
将原来的数组排序后,每来一个新的小数就在原数组用折半查找法进行比对,比对的复杂度只有o(logn)。
发表于:2007-12-17 09:43:113楼 得分:20
如果0,   0.25,   0.5,   0,75,1这组数固定不变的话,记
c/c++ code
float a[5]; a[0] = 0 * 0.25; a[1] = 1 * 0.25; a[2] = 2 * 0.25; a[3] = 3 * 0.25; a[4] = 4 * 0.25;


用新来的浮点小数除以0.25,将得到的结果四舍五入取整即可。
如果是负数与a[0]最近,如果大于4则与a[4]最近。
发表于:2007-12-17 10:38:184楼 得分:0
3楼的方法值得学习!
发表于:2007-12-20 11:10:035楼 得分:15
区间法:

b[0]   =a[0]
b[1]=   (a[0]+a[1])/2
b[2]   =   (a[1]+a[2])/2

...

然后比较在哪个区间里,即   b[i] <=x <b[i+1]
那么就返回i
发表于:2007-12-20 12:03:036楼 得分:0
3楼的方法好。
发表于:2007-12-20 15:35:057楼 得分:0
三楼的方法的却不错


快速检索

最新资讯
热门点击