金山上机题中附加题的思考

winipon 2010-05-26 05:01:42
题目是:

给定一个介于0与1之间的小数,以及分母的最大位数(1-6位)。请构造一个程序,寻找分母在指定位数之内,与给定小数最接近的分子——分母对(显然,分子、分母须为整数)。例如,黄金分割比0.618...,分母限定为2位时,最接近的分数为55/89;分母限定为3位时,为 610/987

我的解题思路请看下面c# 的代码(C++ 有些函数忘记了)

double shang = 0.618;
double sym = 1;
int fenMu = 0;
for (int i = 200; i < 1000; i++)
{
double temp = i * shang; //得到分子
int zhong = (int)(temp);
temp = temp - (double)zhong; //不管分子是小数还是整数减去比分子小的整数,得到小数
if (sym >= temp)// 获得最小的那个小数,记录这是的分母,分子用分母 * 商 求整即可
{
sym = temp;
fenMu = i;
}
}

这个只是一个测试,所以我直接取 0.618为值,优化改进的地方时可以根据给定的值算出计算时候最小开始的值比如这里的200

提出这个方案来大家讨论一下,抛砖引玉,寻找更好的算法
...全文
65 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
leafold 2010-05-27
  • 打赏
  • 举报
回复
1、解出1位分母的值,记录此时分数值与实际小数的差D
2、分子分母同乘以10,根据差D的符号,逐步加或减分子,计算新的差d,当d与D符号相反时,逐步加、或减分母进行微调,直至d再次翻转符号,比较最后两次d的绝对值,取绝对值小的
3、重复2
mayonglong 2010-05-26
  • 打赏
  • 举报
回复
不解,杯具~

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧