Математическое переполнение стека

х ^ 2 + у ^ 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

Решение

Ваш код не будет работать так, как вы хотите. Попробуй это. У вас очень маленький размер данных, поэтому, скорее всего, вам не очень важна эффективность, но я написал несколько простых (но не самых эффективных) решений с использованием 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))
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector