我正在学习 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。
我是一名优秀的程序员,十分优秀!