gpt4 book ai didi

C 编程 - Stern-Brocot 树路径查找器

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:07 25 4
gpt4 key购买 nike

我正在学习 C 编程语言,但在写出 Stern-Brocot 中所需元素的完整路径时遇到了麻烦。树。它只写出路径的第一个数字。我把它设置为左转时写0,右转时写1。无论我选择什么数字,它可以在第 3 层或第 15 层,它仍然只写出第一个数字。

这是 while 循环:

while ((p1+p2!=p) && (q1+q2)!=q) {
if ((p1+p2)/(q1+q2)<p/q) {
printf("1 ");
p1+=p2;
q1+=q2;
} else if (((p1+p2)/(q1+q2)>p/q)) {
printf("0 ");
p2+=p1;
q2+=q1;
}
}

最佳答案

由于您没有显示使用您正在使用的类型,我将假设它们是整数。您在 if 语句中犯了错误,其中除法四舍五入到最接近的整数,并且您丢失了小数位。一个快速的解决方法是强制代码执行浮点除法,方法是将整数转换为 double 。

int p = 3 ;
int q = 5 ;

int p1 = 0 ;
int p2 = 1 ;

int q1 = 1 ;
int q2 = 0 ;

while( p1+p2 != p && q1+q2 != q )
{
if (( p1+p2 )/( double )(q1+q2 ) < p/( double )q)
{
printf("1 ");
p1+=p2;
q1+=q2;
}
else if( ( p1+p2 ) / ( double )( q1+q2 ) > p/( double )q )
{
printf("0 ");
p2+=p1;
q2+=q1;
}
}

现在代码正确打印出 0 、 1 、 0。即左、右和左到达树中的 3/5。

关于C 编程 - Stern-Brocot 树路径查找器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26074763/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com