[英]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.