-1

x^2 + y^2 = Z^2。如何在代码中检验毕达哥拉斯定理的真实性?我的任务是读入 10 个整数,并用这 10 个整数中的每一个来测试语句是真还是假。这就是我所拥有的,但我不确定它是否正确,因为我不确定我是否正在解决 z。

任何帮助表示赞赏

void ESearch(int array[], int size)
{
int trueCount = 0;
//int falseCount = 0;

for(int i = 0; i < size; ++i)
{
    for(int j = 0; j < size; ++j)
    {

        int x = array[i];
        int y = array[j];

        int z = sqrt(pow(x, 2)+ pow(y, 2));

        if(z == x || y)
        {
            ++trueCount;
        }

    }


}
if(trueCount > 0) cout << "\nE is TRUE"; else cout << "\nE is FALSE";

 }
4

1 回答 1

2

你的代码不会按照你想要的方式工作。尝试这个。您的数据量非常小,所以很可能您不太关心效率,但我使用 STL 编写了一些简单(还不是最有效)的解决方案。您定义一个向量并对其进行一次排序,以便在您想要检查该对是否(x,y)满足 Pyth 时使用二进制搜索。来自输入数据的其他整数的定理。它需要log(size),因此即使对于大量数据输入,它也应该相当快。此外,您不需要从数据的开头运行第二个循环,因为您已经在检查同一对但之前的顺序不同。代码应该相当简单,但如果您有任何问题,请提出。祝你好运。

void ESearch(int array[], int size)
{

int trueCount = 0;
std::vector<int> z(array, array + size);
std::sort(z.begin(), z.end());

int x, y;
double z_check;

for(int i = 0; i < size; i++)
{
    x = array[i];

    for(int j = i+1; j < size; j++)
    {
        y = array[j];

        z_check = sqrt(x*x + y*y);

        if(std::binary_search(z.begin(), z.end(), z_check))
        {
            trueCount++;
        }

    }
}
z.clear();
if(trueCount > 0) cout << trueCount; else cout << "\nE is FALSE";
}

编辑:您甚至可以加快速度,因为您知道您正在寻找大于sqrt(x*x+y*y)排序向量的数字:

if(std::binary_search(z.begin() + ceil(z_check), z.end(), z_check))
于 2013-03-25T07:53:20.083 回答