最大公约数(python)

2024-10-02 08:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图让我的代码打印出我最伟大的共同发明者。从技术上讲,我的代码应该可以工作,但在x=0之前,它总是会先运行一步,即使它应该打印x=gcd 你在代码中看到的所有东西都必须保留,因为它是结构基础,这是因为我的学校分配的。 这意味着我必须打印出x,并与r进行一个while循环!=0等等。。。 无论您最可能知道如何修复它,而无需我过度解释代码xD

def ggt2(x, y):
    r = 1
    while r != 0:       #I have to use a while loop
        if x < y:
            r = x % y
            x = y
            y = r
            print(x)    #here it prints nothing at all
        elif x > y:
            r = x % y
            y = x
            x = r
            print(x)    #here it prints x = 0
x = input()
y = input()
ggt2(int(x), int(y))

编辑: 这是我们得到的伪代码。这是我必须遵循的基本结构。我们还被告知要切换x<-&燃气轮机;如果x<;y

GCD :var X,Y,R: int;
input X,Y;
R:=1;
while R ≠ 0 do
R:=X mod Y; X:=Y; Y:=R;
od;
output X.

Tags: 代码ltinputhereitprints结构基础
2条回答

您给出的伪代码称为欧几里德算法。它是基于除法的,x和y的顺序并不重要

def ggt2(a, b):
    while b != 0:
        t = b
        b = a % b
        a = t
    return a

ggt2(24, 60)
ggt2(60, 24)

输出:

12
12

顺序对于基于减法的算法很重要,这就是为什么要求您在x < y时切换x,y

阅读wiki以理解这两种算法

def ggt2(a, b):
    while b != 0:
        t = b
        b = a % b
        a = t
    return a if a != 0 else None

a = int(input("Enter a: "))
b = int(input("Enter b: "))
print("Their GCD is: "+str(ggt2(a,b)))

此代码从Wikipedia上的伪代码转换为Python,只做了一些小的更改

您的代码有一些问题。以下是您的代码:

GCD :var X,Y,R: int;
input X,Y;
R:=1;
while R ≠ 0 do
R:=X mod Y; X:=Y; Y:=R;
od;
output X.

这说明:

  1. 开始GCD
  2. 分别创建类型为XYR的变量
  3. XY输入一个值
  4. R设置为1
  5. 虽然R不等于0do:
  6. (在5的循环中)将R设置为X%Y(剩余的XY
  7. (在5的循环中)将X设置为Y
  8. (在5的循环中)将Y设置为R
  9. 从语句5迭代开始循环结束
  10. 打印出X

此转换为Python的伪代码将是:

def GCD():
    X = int(input("Enter X: "))
    Y = int(input("Enter Y: "))
    R = 1
    while R != 0:
        R = X % Y
        X = Y
        Y = R
    print(X)

GCD()

试着找出它是如何工作的,并在评论中告诉我它是否适合你

相关问题 更多 >

    热门问题