cloudfox 发表于 2020-8-22 12:05:11

求助,请问为什么输出的结果总是1?

def gcd(x,y):
    if x > y:
      pass
    else:
      x,y = y,x
    r = x % y
    if r == 0:
      print (y)
    else:
      while r != 0:
            x = r; r = y % r
            if r == 0:
                break
            else:
                r = x % r
      print(x)
gcd(47,7)

cloudfox 发表于 2020-8-22 12:06:24

第一个if用来确定大/小的余数,然后第二个if用来判断余数是否为0,为0就显示小的,否则开始辗转相除{:10_284:},结果输出都是1{:10_266:}

1q23w31 发表于 2020-8-22 12:10:03

47和7的最大因数是1啊

1q23w31 发表于 2020-8-22 12:10:59

cloudfox 发表于 2020-8-22 12:06
第一个if用来确定大/小的余数,然后第二个if用来判断余数是否为0,为0就显示小的,否则开始辗转相除{:10_28 ...


你换成49和7

cloudfox 发表于 2020-8-22 12:19:46

1q23w31 发表于 2020-8-22 12:10
47和7的最大因数是1啊

突然窒息{:10_285:}

cloudfox 发表于 2020-8-22 12:23:09

1q23w31 发表于 2020-8-22 12:10
你换成49和7

谢谢{:10_247:}

sunrise085 发表于 2020-8-22 12:23:45

第一,并不是输出结果一直为1,是因为你输入的是47和7,这俩数的最大公约数就是1
第二,你的程序在逻辑上是不对的。一开始是x对y求余,后面又变成了y对x求余,而却y一直没有变过。这样出来的结果是不对的。例如:gcd(16,28)输出的结果是12
正确的程序如下:
def gcd(x,y):
    if x <y:
      x,y = y,x
    r = x % y
    while r != 0:
      x = y
      y = r
      r = x % y
    print(y)
其实,根本不用判断x和y的大小,直接辗转相除就可以了,最多是多除一次
def gcd(x, y):
    while y != 0:
      c = x % y
      x = y
      y = c
    print(x)

cloudfox 发表于 2020-8-22 12:31:46

sunrise085 发表于 2020-8-22 12:23
第一,并不是输出结果一直为1,是因为你输入的是47和7,这俩数的最大公约数就是1
第二,你的程序在逻辑上 ...

谢谢!{:5_108:}!!!{:10_254:}

sunrise085 发表于 2020-8-22 12:32:45

cloudfox 发表于 2020-8-22 12:31
谢谢!!!!

你这最佳选的有点快了啊。。。
页: [1]
查看完整版本: 求助,请问为什么输出的结果总是1?