给定一个长度为n的序列,其中包含{a1,a2,a3··········· · ···an}请你将这个序列离散成相对大小数值 0<n<1e5 0<=a[i]<=1e18 输入.用c++表示
时间: 2024-09-18 22:12:29 浏览: 54
要将一个长度为 \( n \) 的整数序列 {a1, a2, ..., an} 转换为相对大小数值,通常我们会先对所有元素进行排序,然后按照相对比例计算每个元素的新值。这里我们假设序列中的所有元素都是非负的,并且最大值不超过 \( 10^{18} \),最小值大于0。
在C++中,你可以这样做:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 定义一个函数来计算相对大小值
vector<long long> relativeSizes(vector<long long>& arr) {
// 对数组进行排序
sort(arr.begin(), arr.end());
// 初始化结果向量和累计和
vector<long long> result(arr.size());
long long sum = 0;
for (int i = 0; i < arr.size(); ++i) {
// 计算每个元素占总和的比例
double ratio = static_cast<double>(arr[i]) / (sum + 1);
// 因为题目要求数值在0到1之间,乘以一个合适的因子使其落在这个范围内
result[i] = min(1LL, max(0LL, static_cast<long long>(ratio * (1 << 62))));
// 更新累计和
sum += arr[i];
}
return result;
}
int main() {
int n;
cout << "请输入序列的长度:";
cin >> n;
vector<long long> input(n);
cout << "请输入序列中的元素:" << endl;
for (int i = 0; i < n; ++i) {
cin >> input[i];
}
vector<long long> result = relativeSizes(input);
for (long long size : result) {
cout << size << " ";
}
cout << endl;
return 0;
}
```
在这个程序中,`relativeSizes` 函数首先对数组进行排序,然后遍历数组,计算每个元素相对于总和的比例,将其转换为一个0到1之间的数值,并四舍五入存储在结果向量中。注意这里使用了一个技巧,通过乘以 \( 1 << 62 \) 来限制数值范围,因为 `double` 类型无法精确表示 `1e18` 这样的大数,所以需要适当地转换。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![text/x-c](https://img-home.csdnimg.cn/images/20250102104920.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)
![-](https://img-home.csdnimg.cn/images/20241231044937.png)