0

如何使用逻辑循环打印出 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) );
                }
            }
        }
    }
4

1 回答 1

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:我相信这个约束也将确保唯一性。

于 2012-07-01T03:23:11.527 回答