我目前正在制作毕达哥拉斯三重取景器。我已经能够让它工作,但现在我正在清理程序返回的结果以避免重复。该程序会找到像 3、4、5 这样的 Pythag 三元组,但随后会再次找到与 4、3、5 相同的三元组。为了解决这个问题,我添加了一些代码,将 Pythag 三元组存储在 3 个数组中:storeA
、storeB
和storeC
. 然后我有一个函数遍历先前存储的变量并将每个变量与当前值进行比较。要访问比较函数中的数组,我必须将数组设为全局。当我启动程序时它工作正常,但是当我输入一个像 10 这样的值时它会失败并出现错误“访问冲突读取位置 0x011F5000”。如果有人能就我的错误启发我,我将不胜感激。
repetitionCheck
是我用来比较值的函数。
#include "stdafx.h"
#include <iostream>
using namespace std;
int squared(int input);
bool pythagCheck(int a, int b, int c);
bool repetitionCheck(int a, int b, int c);
int x;
int increment;
int storeA[1000];
int storeB[1000];
int storeC[1000];
int main()
{
int a = 0, b = 0, c = 0;
//input
cout << "Specify Boundary: ";
cin >> x;
cout << "\n\n";
//function
for (a=0; a<=x; a++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
for (b=0; b<=x; b++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
for (c=0; c<=x; c++)
{
if (pythagCheck(a, b, c) && repetitionCheck(a, b, c))
{
increment++;
storeA[increment] = a;
storeB[increment] = b;
storeC[increment] = c;
}
}
}
}
system("pause");
return 0;
}
int squared(int input)
{
return input * input;
}
bool pythagCheck(int a, int b, int c)
{
if (squared(a) + squared(b) == squared(c) && a != 0 && b != 0 && c != 0)
{
cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
return true;
}
}
bool repetitionCheck(int a, int b, int c)
{
for (int i = 0; i >= increment; i++)
{
if (storeA[i] == b) { return false; }
}
for (int i = 0; i >= increment; i++)
{
if (storeC[i] == c) { return false; }
}
return true;
}