定义一个圆盘类Circle,用20个小于100的随机数组成一个圆(首尾相接),分别求出连续的4个数之和最大的4个数及其和的值以及连续的4个数之和最小的4个数及其和值(输出整个数列,最大,最小的4个数及其和值)
时间: 2024-12-19 09:27:13 浏览: 3
1_1. 产生100个随机数_求其最小值和最大值以及平均值_
5星 · 资源好评率100%
首先,我们需要创建一个名为Circle的类,并包含一个用于存储随机整数的容器。我们将使用C++标准库中的<random>和<algorithm>来生成随机数并计算最大和最小的连续四个数之和。这里是一个简单的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <random>
#include <algorithm>
class Circle {
private:
std::vector<int> disk; // 存储随机数的向量
std::mt19937 rng; // 使用Mersenne Twister随机数生成器
public:
// 构造函数,生成20个小于100的随机数
Circle() {
disk.resize(20);
for (size_t i = 0; i < disk.size(); ++i) {
disk[i] = static_cast<int>(std::uniform_int_distribution<>(0, 99)(rng));
}
rng.seed(std::chrono::system_clock::now().time_since_epoch().count()); // 初始化随机种子
}
// 获取连续4个数的最大和最小之和及其位置
void getMinMaxSums() {
int max_sum = *std::max_element(disk.begin(), disk.end()); // 获取最大元素作为初始和
int min_sum = *std::min_element(disk.begin(), disk.end()); // 获取最小元素作为初始和
size_t max_start = 0, min_start = 0;
// 扫描整个数组寻找最大和最小的连续四个数之和
for (size_t i = 0; i + 3 < disk.size(); ++i) {
int sum = disk[i] + disk[i + 1] + disk[i + 2] + disk[i + 3];
if (sum > max_sum) {
max_sum = sum;
max_start = i;
}
if (sum < min_sum) {
min_sum = sum;
min_start = i;
}
}
std::cout << "圆盘数列: ";
for (const auto& num : disk) {
std::cout << num << " ";
}
std::cout << "\n";
std::cout << "最大连续四个数之和 (" << max_start << ", " << max_start + 3 << "): "
<< max_sum << std::endl;
std::cout << "最小连续四个数之和 (" << min_start << ", " << min_start + 3 << "): "
<< min_sum << std::endl;
}
};
int main() {
Circle circle;
circle.getMinMaxSums();
return 0;
}
```
当你运行这段代码时,它会生成一个圆盘类实例,然后计算并输出整个数列、最大连续四个数之和的位置及其值,以及最小连续四个数之和的位置及其值。
阅读全文