#include<iostream> #include<vector> #include<ctime> #include<algorithm> #include"Queen.h" using namespace std; std::vector<int> CreatRandomPrice(int min, int max, int num) { std::vector<int> price; if (max - min + 1 < num) { return price; } srand(time(0)); for (auto i{ 0 }; i < num; i++) { while (true) { auto temp{ rand() % (max + 1 - min) + min }; auto iter{ find(price.begin(),price.end(),temp) }; if (price.end() == iter) { price.push_back(temp); break; } } } return price; } int main() { Queue<double,24> queue; auto rand = CreatRandomPrice(100, 999, 168); double sum = 0, average; for (int i = 0; i < 168; i++) { if (!queue.isFull()) { queue.insert(rand[i]); sum += rand[i]; average = sum / (i + 1); } else { sum = sum - queue.getFront() + rand[i]; average = sum / 24; queue.remove(); queue.insert(rand[i]); } cout << "当前价格: " << rand[i] << ", 最近24小时商品平均价格: " << average << endl; } return 0; }
时间: 2024-04-27 22:22:38 浏览: 165
这是一段 C++ 代码,使用了 STL 中的 vector 和 algorithm 库。它定义了一个 CreatRandomPrice 函数,用于生成一组在 min 和 max 之间的不重复的 num 个随机数。然后,它定义了一个 Queue 类,用于实现一个循环队列,队列的最大大小为 24。接着,在 main 函数中,它使用 CreatRandomPrice 函数生成 168 个随机数,并将它们插入到 Queue 对象中。当队列还未满时,直接插入并计算平均值;当队列已满时,先移除队首元素,再插入新元素并计算平均值,并输出当前价格以及最近 24 小时的平均价格。
相关问题
仅使用<iostream> #include <string> #include <cstdlib> #include <cstring> #include <cctype> #include <cmath> #include <cstdio> #include <cerrno> #include <clocale> #include <ctime> #include <cwchar> #include <cwctype> #include <iomanip> #include <numeric> #include <algorithm> #include <unistd.h> #include <sys/wait.h> #include <conio.h>库实现控制台填表式输入
### 控制台表格输入的实现方法
为了在控制台上实现类似于“填表”的功能,可以利用C++的标准库来处理用户的逐行输入并将其存储在一个二维数据结构中。这里推荐使用 `std::vector<std::string>` 来保存每一行的数据条目。以下是具体实现方式:
#### 表格输入的核心逻辑
通过循环不断请求用户输入每列的内容,并将这些内容按照行的形式存入容器之中。当完成所有必要字段的信息采集后,则停止收集流程并将结果打印出来或者继续其他业务逻辑操作。
```cpp
#include <iostream>
#include <vector>
#include <string>
using namespace std;
// Function to display table header dynamically based on column names provided by user or predefined ones.
void showTableHeader(const vector<string>& headers) {
cout << "+-----------------------------+\n"; // Fixed width for simplicity
cout << "| ";
for (const auto& hdr : headers) {
cout << setw(15) << left << hdr.substr(0, 15) << " | "; // Limit each field length to 15 chars
}
cout << "\n+-----------------------------+\n";
}
// Collecting data row-by-row from console until sentinel value entered ('done').
vector<vector<string>> collectDataRows(int numCols) {
vector<vector<string>> rows;
string cellValue;
int rowIndex = 0;
while (true) {
vector<string> currentRow(numCols);
cout << "Enter values for Row #" << ++rowIndex << ": \n";
for (int col = 0; col < numCols; ++col) {
cout << "Column [" << col + 1 << "] Value: ";
getline(cin >> ws, cellValue); // Use getline with manipulator to handle spaces correctly
if ("done" == cellValue && !rows.empty()) {
return rows; // If 'done', exit collection only after at least one valid entry exists.
}
currentRow[col] = move(cellValue);
if (!cellValue.empty() && all_of(cellValue.begin(), cellValue.end(), ::isspace)) {
throw invalid_argument("Empty cells not allowed.");
}
}
rows.emplace_back(move(currentRow));
}
}
// Display collected data in tabular format similar to how it was inputted earlier.
void printDataTable(const vector<string>& headers, const vector<vector<string>>& body) {
showTableHeader(headers);
for (const auto& rowData : body) {
cout << "| ";
for (size_t i = 0; i < rowData.size(); ++i) {
cout << setw(15) << left << rowData[i].substr(0, 15) << " | ";
}
cout << endl;
}
cout << "+-----------------------------+" << endl;
}
int main() try {
const int NUM_COLUMNS = 3; // Example number of columns
cout << "Welcome! Let's create a simple table.\nSpecify three-column entries below:\n";
vector<string> columnNames {"Name", "Age", "Occupation"};
showTableHeader(columnNames);
auto dataTable = collectDataRows(NUM_COLUMNS);
printDataTable(columnNames, dataTable);
} catch (exception& e) {
cerr << "Error occurred during execution: " << e.what() << ". Exiting..." << endl;
return EXIT_FAILURE;
}
```
此代码片段展示了如何构建一个基本但灵活的命令行界面用于录入多行列信息[^3]。它首先定义了一些辅助函数用来展示头部和实际记录部分;接着提供了核心算法让用户能够反复提交新的项目直至他们决定终止会话为止。最后还加入了异常处理器以便更好地应对潜在错误状况的发生。
---
###
#include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<ctime> #include<iostream> #include<algorithm> #include<map> #include<stack> #include<queue> #include<vector> #include<set> #include<string> #define dd double #define ll long long dd PI = acos(-1); using namespace std; const ll MAXN = 1e5 + 5; const ll INF = 1e9 + 5; ll n; struct node { ll x, y; }s[5000]; ll dp[MAXN] = { 0 }; int main() { //ios::sync_with_stdio(false); ll n, m; cin >> n >> m; for (ll i = 1; i <= n; i++) { cin >> s[i].x >> s[i].y; } for (ll i = 1; i <= n; i++) { for (ll j = m; j >= s[i].x; j--) { dp[j] = max(dp[j], dp[j - s[i].x] + s[i].y); } } cout << dp[m] << endl; }
这是一段动态规划求解背包问题的代码,用来求解一个容量为m的背包能够装下的最大价值。具体实现过程为:
1. 定义一个结构体node,用来存储物品的重量和价值。
2. 读入物品数量n和背包容量m,然后读入每个物品的重量和价值。
3. 使用二重循环,遍历每一个物品,然后从大到小枚举背包容量j,更新dp[j]的值,表示容量为j的背包能够装下的最大价值。
4. 最后输出dp[m]的值,即容量为m的背包能够装下的最大价值。
值得注意的是,这段代码中还定义了一些常量和宏定义,如MAXN、INF等,以及一些头文件和命名空间的使用。
阅读全文
相关推荐














