在我关于这个主题的previous post中,我没有取得什么进展(除了我自己以外没有责怪任何人!)所以我会尝试以不同的方式处理我的问题陈述。
我如何编写算法来生成原始三元组列表?
所有我必须开始的是:
a)基本定理:a^2 + b^2 = c^2
(注意:'n'< = 200为此目的)
我如何构建循环?我需要2个或3个循环吗?
一位教授给了我一些提示但是我仍然迷失了。我不知道从哪里开始构建我的循环。我需要2个或3个循环吗?我是否循环a和b或者我是否需要将'n'变量引入自己的循环中?对于有经验的程序员来说,这可能看起来很明显,但似乎我还需要更多的手握......任何帮助都将受到赞赏!毕达哥拉斯三重奏是a,b,c的组 其中a ^ 2 + b ^ 2 = c ^ 2。你需要 找到所有的a,b,c组合 满足上述规则开始 0,0,0到200,609,641第一个 三重将是[3,4,5]下一个将 是[5,12,13]等.n是长度的 如果n是5你需要的那么小的一面 检查所有三元组 a = 1,a = 2,a = 3,a = 4,a = 5并找到两者 上面显示的案例是 毕达哥拉斯,
修改
感谢所有提交。所以这就是我提出的(使用python)
import math
for a in range (1,200):
for b in range (a,a*a):
csqrd = a * a + b * b
c = math.sqrt(csqrd)
if math.floor(c) == c:
print (a,b,int(c))
这个DOES返回三元组(200,609,641),其中200是'a'的上限,但计算'b'的上限仍然很棘手。不知道我怎么会这样...建议欢迎:))
由于
巴巴
P.S。我不是在寻找解决方案,而是帮助提高解决问题的能力。 (绝对需要:-))
答案 0 :(得分:1)
你只需要两个循环。请注意,n
已给出,这意味着您从键盘或文件中读取。
阅读n
后,您只需从1循环a
,然后在该循环中从b
循环a
。然后,检查是a <= n
还是b <= n
。如果是,则检查a^2 + b^2
是否为正方形(如果它可以写为c^2
,其中c
是整数)。如果是,则输出相应的三元组。您可以在a > n
之后停止第一个循环,在b > n
之后停止第二个循环。
答案 1 :(得分:1)
要计算b
的上限...当然我们不能超过^ 2 + b ^ 2 =(b + 1)^ 2,因为连续方块之间的间隙增加。现在,(b + 1)^ 2是b ^ 2 + 2b + 1,所以我们可以在a ^ 2&lt; 2b + 1.(事实上,对于奇数a,最大三元组是当b =(a ^ 2 - 1)/ 2,然后a ^ 2 + b ^ 2 =(b + 1)^ 2。)
让我们考虑一下。然后,我们需要考虑a ^ 2 + b ^ 2 =(b + 2)^ 2,因为2b + 1必然是奇数。现在,(b + 2)^ 2 - b ^ 2 = 4b + 4,所以我们看a ^ 2 = 4b + 4,或b =(a ^ 2 - 4)/ 4作为最高b(和和以前一样,我们知道这个有效。)
因此,对于给定的a,您需要检查bs到
(a ^ 2 - 1)/ 2(奇数)
(a ^ 2 - 4)/ 4(偶数)
答案 2 :(得分:0)
单独留下公式和语言,你试图找到两个变量的每个组合,a和b所以......
foreach A foreach B foreach C do something with B and A and eval with c end foreach C end foreach B end foreach A
for ($x = 1; $x <= 200; $x++) {
for ($y = 1; $y <= 200; $y++) {
for ($z = 1; $z <= 200; $z++) {
if ($x < $y) {
if (pow($x, 2) + pow($y, 2) == pow($z, 2)) {
echo "$x, $y , $z<br/>";
}
}
}
}
}
3,4,5
5,12,11
6,8,10
......
81,108,135
84,112,140
84,135,159
答案 3 :(得分:0)
给定任何a和b,你可以计算c应该是什么。您还可以检查您获得的c是否为整数。考虑到这一点,您需要检查所有a和b值并找到能够给出整个c值的值。
这应该只需要两个循环(一个用于a,一个用于b)。如果您需要更多帮助,请留下评论,并告诉我您遇到的问题。
答案 4 :(得分:0)
因此,毕达哥拉斯的幸运儿有两个属性可以解决这个问题:
首先,三元组中的所有数字必须是整数(这意味着,您可以计算a^2 + b^2
,如果c^2
是整数而不是浮点数,则您有三元组。此外,c
受a
和b
的限制。
所以这应该告诉你你有多少变量(这将指导你的算法设计 - 特别是你需要多少个循环)。后一条信息将告知您需要迭代多长时间。我根据你的要求试图模糊不清,但如果你想要更具体的东西,请告诉我。
答案 5 :(得分:0)
将问题分解为子问题。第一个线索是,n
的值上限为c
。让我们从c=1
开始---所以,让我们看看可以形成多少三元组:
a^2 + b^2 = 1
现在,让我们设置a = 1 to c-1
。这意味着我们必须检查b
是否为b^2 = c^2 - a^2
和b^2 = int(b)^2
的整数。