问:,我试过很多种方法,但都没成功。请告诉我一条路。
我试过的最后一条代码;
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()
您的输出,你的代码我的输出,我的代码,但是我的代码是错误的。我的代码输出会和你的一样吗?
通常我的欧几里得方法是正确的。但是,当我用这段代码来嵌套时,它就行不通了。
发布于 2018-04-07 17:05:34
您最大的问题似乎是gcd的实现。在python中获取gcd的一个简单方法是导入它:
from fractions import gcd
如果您想自己实现它,可以使用欧几里得的方法:
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()
https://stackoverflow.com/questions/49709801
复制相似问题