Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 确定给定数N是否可以成为具有所有3条整边的直角三角形斜边的算法_Java_C++_C_Algorithm_Geometry - Fatal编程技术网

Java 确定给定数N是否可以成为具有所有3条整边的直角三角形斜边的算法

Java 确定给定数N是否可以成为具有所有3条整边的直角三角形斜边的算法,java,c++,c,algorithm,geometry,Java,C++,C,Algorithm,Geometry,假设给定直角三角形的斜边,那么如何确定给定斜边是否有两条积分较小的边 例如,斜边为5。然后必须确定给定直角三角形的积分边是否较小。答案将是是,因为我们可以将较小的边设为3和4,从而得到3-4-5的直角三角形 类似地,对于斜边7,我们可以没有这样的直角三角形 换句话说,我们必须找出一个给定的数字N是否可以作为一个三边都是整数的直角三角形的斜边。 我在上浏览了整篇文章,但仍然没有成功。我不知道要检查哪些条件。请帮助。编辑:无需执行以下步骤,因为它将始终返回false //For each eleme

假设给定直角三角形的斜边,那么如何确定给定斜边是否有两条积分较小的边

例如,斜边为5。然后必须确定给定直角三角形的积分边是否较小。答案将是
,因为我们可以将较小的边设为3和4,从而得到3-4-5的直角三角形

类似地,对于斜边7,我们可以没有这样的直角三角形

换句话说,我们必须找出一个给定的数字N是否可以作为一个三边都是整数的直角三角形的斜边。


我在上浏览了整篇文章,但仍然没有成功。我不知道要检查哪些条件。请帮助。

编辑:无需执行以下步骤,因为它将始终返回false

//For each element in the array check whether twice its value equals N^2. If no match occurs then continue to the following.

有两个计数器I1和I2->初始化I1=1和I2=N-1。
1.检查总和I1^2+I2^2;
2.如果总和大于N^2,则减小右计数器(I2)。
3.如果小于N^2,则增加左侧计数器(I1)。
继续执行上述3条语句,直到发生以下情况之一。
->如果和匹配N^2,则可以形成直角三角形。
->如果I2
inthypo=5,则i;
双倍其他=0;
对于(i=1;i,对于原始毕达哥拉斯三元组:

(p^2 - q^2)^2 + (2 * p * q))^2 = (p^2 + q^2)^2 = N^2
假设p>=q,那么我们有

N >= 2 * q^2 or q <= sqrt(N / 2)
这个怎么样

  • “较小”的边显然应该比三角形的斜边小
  • 我们还需要两个方面
->2 for loops延续到斜边,类似这样:

public static boolean isAnIntegerTriangle(int hypotenuse) {
    for (int i = 0; i < hypotenuse; i++) {
        for (int j = 0; j < hypotenuse; j++) {
            boolean b = ((hypotenuse * hypotenuse) == (i * i + j * j));
            if (b)
                return true;
        }
    }
    return false;
}
输出:

true
true
false

这个问题一直是我在网上搜索最多的话题之一。但答案很简单。得出答案,让n可以是直角三角形的斜边。n^2=a^2+b^2。(n,a和b是整数)。显然,对于任何整数k,k*n可以是斜边。任何形式的素数(4*l+1)都可以是斜边(l是整数)所以,把一个数分成它的素数因子。如果至少有一个素数因子的形式是4*l+1,那么显然这个数可以是斜边。 5可以表示为4*1+1和5^2=3^2+4^2。同样,78=2*3*13和 13可以表示为4*3+1,13^2=5^2+12^2
=>78^2=30^2+72^2

您需要的复杂性是什么。在我看来,这可以被建模为一个2和问题。给定的斜边总是一个整数吗?是的,所有的三条边都必须是整数。“换句话说,我们必须找出给定的数字N是否作为直角三角形的斜边,所有的三条边都是整数。”我花了几分钟才明白这一点,但它实际上非常优雅。我喜欢它。创建数组是不必要的(而且效率很低)。你可以在数字1到N-1之间循环,并在进行时将它们平方。它并不总是给出正确的答案。as 51是一个可能的斜边,但它给出的是它不是。@lavee_singh:很抱歉反应太晚。是的,上面找到了基本/主要毕达哥拉斯元组。
51^2=24^2+45^2
是从基本
17^2派生出来的=8^2+15^2
我们不会得到前者,但会得到后者。好的,现在我们必须标记所有已找到斜边的倍数,以防止此类错误!
#include <stdio.h>
#include <math.h>

void CheckTuple(int n)
{
    int k = sqrt(n/2.0);

    for (int i = 1; i <= k; i++) {
        int tmp = sqrt((double)(n - i * i));
        if ((tmp * tmp) == (n - i * i)) {
            printf("%d^2 + %d^2 = %d^2\n", (tmp*tmp - i*i), 2 * tmp * i, n);
            return;
        }
    }
    printf("%d is not part of a tuple\n", n);
    return;
}


int main(int argc, char *argv[])
{

    CheckTuple(5);
    CheckTuple(6);
    CheckTuple(13);
    CheckTuple(10);
    CheckTuple(25);

    return 0;
}
3^2 + 4^2 = 5^2
6 is not part of a tuple
5^2 + 12^2 = 13^2
8^2 + 6^2 = 10^2
7^2 + 24^2 = 25^2
public static boolean isAnIntegerTriangle(int hypotenuse) {
    for (int i = 0; i < hypotenuse; i++) {
        for (int j = 0; j < hypotenuse; j++) {
            boolean b = ((hypotenuse * hypotenuse) == (i * i + j * j));
            if (b)
                return true;
        }
    }
    return false;
}
public static void main(String[] args) {
    System.out.println(isAnIntegerTriangle(5));
    System.out.println(isAnIntegerTriangle(10));
    System.out.println(isAnIntegerTriangle(7));
}
true
true
false