DIscrete Math C ++

时间:2013-03-25 05:20:30

标签: c++ discrete-mathematics

x ^ 2 + y ^ 2 = Z ^ 2。如何在代码中测试毕达哥拉斯定理的真实性?我的任务是读取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";

 }

1 个答案:

答案 0 :(得分: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))