以下是使用C++的另一种实现方法:
#include <iostream>
#include <iomanip>
#include <string>
#include <vector>
using namespace std;
struct Item {
int month;
int day;
string name;
double price;
Item(int m, int d, const string& n, double p) : month(m), day(d), name(n), price(p) {}
};
class List {
private:
vector<Item> items;
public:
void insert(const Item& item) {
items.push_back(item);
}
void insert(int index, const Item& item) {
if (index >= 0 && index <= items.size()) {
items.insert(items.begin() + index, item);
}
}
void printList() {
for (const auto& item : items) {
cout << item.month << " " << item.day << " ";
}
cout << endl;
}
int locate(int month, int day) {
for (int i = 0; i < items.size(); i++) {
if (month < items[i].month || (month == items[i].month && day <= items[i].day)) {
return i + 1;
}
}
return items.size() + 1;
}
};
int main() {
int m, n;
cin >> m >> n;
List list;
for (int i = 0; i < m; i++) {
string str;
string name;
double price;
cin >> str >> name >> price;
int month = stoi(str.substr(0, 2));
int day = stoi(str.substr(3));
Item item(month, day, name, price);
list.insert(list.locate(month, day), item);
}
double sum1 = 0.0;
int count1 = 0;
double sum2 = 0.0;
int count2 = 0;
for (const auto& item : list.items) {
if (item.name == "keyboard") {
sum1 += item.price;
count1++;
} else if (item.name == "mouse") {
sum2 += item.price;
count2++;
}
if (count1 >= n && count2 >= n) {
break;
}
}
cout << fixed << setprecision(1) << sum1 / n << endl;
cout << fixed << setprecision(1) << sum2 / n << endl;
return 0;
}
这个实现方法使用了 std::vector
来存储数据,并通过遍历向量来执行插入和查找操作。同时,也进行了一些代码的优化和改进,使得逻辑更清晰可读。
内容由零声教学AI助手提供,问题来源于学员提问