-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を使用していくつかの単純な(まだ最も効率的ではない)ソリューションを作成しました。ベクトルを定義し、それを1回ソートして、ペア(x,y)がPythを満たしているかどうかを確認するときにバイナリ検索を使用します。入力データからの他の整数の定理。時間がかかるlog(size)ため、大量のデータ入力の場合でも適度に高速である必要があります。また、以前は同じペアを異なる順序でチェックしているため、データの先頭から2番目のループを実行する必要はありません。コードはかなり単純なはずですが、ご不明な点がございましたら、お問い合わせください。幸運を。

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 に答える