如何使用逻辑循环打印出20个毕达哥拉斯数的非全等三角形。 没有重复数字,即如果我有4,3,5我就不能有3,4,5。
我正在使用“for”循环,但我不知道如何删除重复的答案。
for (k = 0; k < 50; k++)
{
for ( i = 0; i < 50; i++)
{
for ( j = 0; j < 50; j++)
{
if ( (k+1)*(k+1) + (i+1)*(i+1) == (j+1)*(j+1) )
{
System.out.println( "\n\n\t\tThe numbers are : " + (k+1) + ", "
+ (i+1) + ", "
+ (j+1) );
}
}
}
}
答案 0 :(得分:2)
可以想到两个(相关的)选项:您可以按照排序顺序“保留”每个三元组,因此当您找到{4,3,5}时,在保存之前将其转换为{3,4,5}它随后与任何其他人进行比较以获得独特性。或者,您可以创建一个“Triple”类,您可以在其中定义类似boolean equals(final Triple rval)
的方法,该方法可以对每个元素进行从最低到最高的比较。当然,也有可能采取其他方式。
更新:鉴于您刚刚添加的代码,如果您只想将它们打印出来,那么您可能不需要像我上面所假设的那样保留您到目前为止所发现的三元组。您的代码的以下修改可能有效:
for (k = 0; k < 50; k++)
{
for ( i = k; i < 50; i++)
{
for ( j = i; j < 50; j++)
{
if ( (k+1)*(k+1) + (i+1)*(i+1) == (j+1)*(j+1) )
{
System.out.println( "\n\n\t\tThe numbers are : " + (k+1) + ", "
+ (i+1) + ", "
+ (j+1) );
}
}
}
}
请注意,我更改了内部循环的起点,以确保您将找到所有三元组的以下保留:k <= i <= j
。我相信这种约束也将确保唯一性。