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";
}
答案 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))