Q 我尝试了很多方法,但它没有用。请告诉我一个方法。
我尝试过的最后一段代码;
n = int(sys.argv[1])
x = stdarray.create2D(n,n,0)
for i in range(n):
for j in range(n):
if i > j:
while j != 0:
z = i % j
i = j
j = z
elif j > i:
while i != 0:
z = j % i
j = i
i = z
if i == 1 or j == 1:
stdio.write("* ")
else:
stdio.write(" ")
stdio.writeln()
我从我的代码中解释一些细节,我使用不同的库而不是正常的。 stdio.writeln就像打印一样。你应该认为它是印刷品......
和stdarray.create bla bla是一个数组。 第一个n表示:行 第二个n代表:列 你可以看到它将是方阵。 (因为它们都是“n”)
我的代码的输出是;如果我在argv中输入5。它将是5x5矩阵。和输出是;
0 1 2 3 4
1 1 1 3 4
2 1 1 3 4
3 1 1 3 4
4 1 1 3 4
但这是错的。例如,此输出中的2 = 3。 但这是错的。肯定是; 1。 3和2的gcd应该是1.而不是3。
我尝试了很多方法。但我没有解决这个问题。
对于Primusa, 你的代码是正确的,但在我的大学,我们还没有看到功能。 我不能使用函数。
所以这是你的正确代码,
for i in range(n):
for j in range(n):
GCD = gcd(i, j)
if GCD == 1:
stdio.write("* ")
else:
stdio.write(" ")
stdio.writeln()
我尝试在没有功能的情况下更改该代码。但不起作用。 我的代码,
for x in range(n):
for y in range(n):
while y != 0:
temp = y
y = x % y
x = temp
GCD = x
if GCD == 1:
stdio.write("* ")
else:
stdio.write(" ")
stdio.writeln()
你的输出, Your code 我的输出, my code 但我的代码错了。我的代码输出将如何像你的一样?
通常我的欧几里德的方法运作正常。但是当我使用该代码进行嵌套时,它将无法正常工作。
答案 0 :(得分:0)
你最大的问题似乎是你的gcd实现。 在python中获取gcd的一种简单方法就是导入它:
from fractions import gcd
如果您想自己实施,可以使用Euclid的方法:
def gcd(a, b):
while b:
a, b = b, a%b
return a
将其放在代码的上下文中:
n = int(sys.argv[1])
for row in range(n):
for col in range(n):
GCD = gcd(row, col)
if GCD == 1:
stdio.write("* ")
else:
stdio.write(" ")
stdio.writeln()
如果你想在没有任何功能的情况下这样做,请记住使用单独的变量,因为该功能可能会无意中修改这些值:
for x in range(n):
for y in range(n):
a = y
b = x
while b:
a, b = b,a%b
GCD = a
if GCD == 1:
stdio.write("* ")
else:
stdio.write(" ") #note outputs weren't lining up so I added an extra whitespace
stdio.writeln()