#include <iostream> #include <vector> #include <algorithm> #include <unordered_set> using namespace std; vector<vector<float>> findStonePairs(const vector<float> &stones, float D) { vector<vector<float>> result; unordered_set<float> set; for (int i = 0; i < stones.size(); i++) { float target1 = stones[i] - D; if (set.count(target1)) { result.push_back(vector<float>{target1, stones[i]}); // weight } float target2 = stones[i] + D; if (set.count(target2)) { result.push_back(vector<float>{target2, stones[i]}); // weight } set.insert(stones[i]); } return result; } int main() { float d = 2; vector<float> weights_test1 = {1.2, 3.2, 1.3, 3.3, 6, 5.2}; vector<vector<float>> result_test1 = findStonePairs(weights_test1, d); cout << "test1:" << endl; for (int i = 0; i < result_test1.size(); i++) { for (int j = 0; j < result_test1[i].size(); j++) { cout << result_test1[i][j] << " "; } cout << endl; } return 1; }为什么结果与预期不同
时间: 2023-12-10 20:42:56 浏览: 103
#include_iostream.h_
4星 · 用户满意度95%
可能是因为你在比较浮点数时使用了相等运算符,这在计算机中是不准确的。你可以使用一个足够小的数值epsilon来代替相等运算符,例如:
```
bool isEqual(float a, float b, float epsilon = 0.0001) {
return fabs(a - b) < epsilon;
}
```
然后在比较浮点数时,使用这个函数来代替相等运算符。此外,你可能还需要按照一定的顺序对石头进行排序,以便在比较时能够保证正确的结果。
阅读全文