簡體   English   中英

直接數學C ++

[英]DIscrete Math C++

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";

 }

您的代碼無法按您想要的方式工作。 嘗試這個。 您的數據量很小,因此很可能您不太在乎效率,但是我使用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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM