【发布时间】:2013-10-20 16:45:35
【问题描述】:
#include <stdio.h>
void main ()
{
int a = 0, b = 0, c = 0, n;
int counter = 0;
printf("Please Enter a Positive Integer: \n");
scanf("%d", &n);
for (c = 0; c < n; c++)
{
for (b = 0; b < c; b++)
{
for (a = 0; a < b; a++)
{
if (a * a + b * b == c * c )
{
printf("%d: \t%d %d %d\n", ++counter, a, b, c);
}
}
}
}
}
这个程序计算给定整数 n 中有多少毕达哥拉斯三元组。
这也包括所有全等的三元组。
我想更改程序,使其不包含相互组合的三元组,我不知道该怎么做,有什么提示吗?
例如当输入整数15时,将打印如下:
3, 4, 5
6, 8, 10
5, 12, 13
6, 8, 10 是3, 4, 5 的组合,我不希望打印此值。我将如何更改程序以使其不打印另一个毕达哥拉斯三元组的任何组合?
【问题讨论】:
-
并且 main() 应该返回 int。
int main(void)或int main (int, char**)提示:GCD -
我在想,可以说 n 是任意数字,如果 nana+ nbnb==ncnc 等于 a a+bb==cc 那么三元组将是彼此的组合,我只是不确定如何将其转换为代码。
-
您可以尝试一定范围内的所有数字
n,看看其中是否有任何一个产生重复的三元组。 -
给定 a、b、c 三个数,当 GCD(a,b) ≠ 1 ∧ GCD(b,c) ≠ 1 ∧ GCD(c,a) ≠ 1 时(可能是三个 GCD 值必须是相同的值),那么你有一个非最小的解决方案。
标签: c