举个例子 20.212 20.135 20.3421 20.254 20.421 .....这些double类型数中,出现最多的是20.2xx,我需要找到并得到20.2
时间: 2024-10-14 11:05:20 浏览: 8
假设你有一个包含类似数字的数组,如`double arr[] = {20.212, 20.135, 20.3421, 20.254, 20.421}`...,你可以通过遍历数组并维护一个统计结构来找出重复频率最高的数。这里是一个简单的例子,我们会创建一个哈希表或者使用`std::map`来存储每个小数点后两位的数字作为键,对应出现的次数作为值。
```cpp
#include <iostream>
#include <map>
#include <vector>
using namespace std;
double findMostFrequent(double arr[], int size) {
map<string, int> frequencyMap;
string subDecimal;
for (int i = 0; i < size; ++i) {
double num = arr[i];
// 提取小数点后的两位
int pos = find(num, '.') + 1;
ostringstream oss;
oss << fixed << setprecision(2) << num;
subDecimal = oss.str().substr(pos);
frequencyMap[subDecimal]++;
}
double mostFrequent = -1.0;
string mostFrequentSubDecimal;
for (auto const& pair : frequencyMap) {
if (pair.second > mostFrequent && pair.first.find('.') != string::npos) {
mostFrequent = pair.second;
mostFrequentSubDecimal = pair.first;
}
}
return atof(mostFrequentSubDecimal.c_str());
}
int main() {
double arr[] = {20.212, 20.135, 20.3421, 20.254, 20.212};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "重复最多的小数部分是: " << findMostFrequent(arr, size) << endl;
return 0;
}
```
在这个例子中,函数`findMostFrequent`会返回出现最多的小数部分,如`20.2`。注意,由于double的精度限制,这种方法可能导致无法精确地找到20.20这样的精确匹配,但它能帮助你找到最接近的重复值。
阅读全文